Ich habe eine Reihe von Jasmine
Tests gegen einen AngularJs
-Dienst, der ECMAScript Internationalisierung API verwendet. Sie laufen alle erfolgreich, wenn ich sie über Chrome starte. Jedoch, wenn ich PhantomJS
benutze, um sie durch maven auszuführen, scheitern sie alle, wie es scheint PhantomJs
unterstützt Internationalisierung API noch nicht.Javascript Internationalisierung API wird nicht von PhantomJS unterstützt
Die Fehlermeldung, die ich für die Tests erhalten mit Intl Objekt ist:
1: ReferenceError: Can't find variable: Intl in localizationService.js
Und der Rest der Tests nur scheitern.
Die Tests sind einfach und wie folgt aussehen:
it('Format date with en-us locale', (function(){
var date= "06/13/2013"
expect(service.date(date,'en-us')).toEqual("6/13/2013");
}))
und die Methoden in Service (localizationService.js) sind einfache Wrapper um Intl API:
function getCurrentTimeZone(){
return Intl.DateTimeFormat().resolved.timeZone
}
function date(dateInput,locale,options){
// some other stuff
// ...
if (locale) {
return _date.toLocaleDateString(locale,options);
} else {
return _date.toLocaleDateString();
}
}
Meine Fragen sind:
1- Stimmt meine Annahme, dass PhantomJS v1.9.2
ECMAScript internationalization API
nicht unterstützt? Gibt es das irgendwie, um das zu bestätigen?
2- Wie kann ich dieses Problem lösen? Ich muss meine Tests durch maven ausführen und ich werde mehr Tests haben, die meine localizationService API auf die eine oder andere Weise treffen.
Dank
diese Antwort ist viel besser. Ich schlage vor, dies als die richtige Antwort zu akzeptieren. Prost! – activedecay
Arbeitete auch für mich. Zusätzlich zu den oben genannten Schritten musste auch diese Zeile hinzugefügt werden: require ("karma-intl-shim") zum Array plugins in karma.conf.js – vanval
Wenn Sie Tests mit --single-run = false ausführen, Sie müssen ausbrechen und den Prozess neu starten, bevor Änderungen an 'karma.conf.js' wirksam werden. Habe ungefähr eine Stunde verloren ... –