Ich benutze Karma + Jasmine, um meine AngularJS Direktiven zu testen, ich schrieb mehr als 300 Tests und ich war sehr glücklich ... bis ich ein Problem fand, das mich hierher brachte, weil ich bin festgefahren: einige Tests scheitern, weil sie ein CSS benötigen, das auf einige Elemente angewandt wird (ein Stück Code in meiner Direktive tut eine Größenberechnung, die auf diesem Stil basiert), und obwohl ich die Datei hinzufügte, die die CSS Implementierung enthält, scheint diese Datei ignoriert während Tests. In meinem Karma Config habe ich die CSS-Datei auf diese Weise:CSS Angeltests AngularJS Direktiven mit Karma + Jasmine
files: [
// ..
'styles/foo.css',
// ..
],
die obigen Einstellungen erzeugt einen Link-Tag in der body
anstatt head
, also habe ich versucht, die CSS "manuell" mit js zu injizieren:
angular.element(document).find('head').prepend(
'<style type="text/css">@charset "UTF-8";' +
'/* THE STYLE I NEED FOR MY TESTS HERE */' +
'</style>'
);
aber keiner dieser Ansätze scheint zu funktionieren (ich habe getestet und das style-Tag wird richtig injiziert). Ich versuchte schließlich einen Block von Stil unter dem HTML-Code hinzufügen, die ich Winkel $compile
mit kompilieren:
var element = ng.element('<div>' +
'<style type="text/css">@charset "UTF-8";' +
'/* THE STYLE I NEED FOR MY TESTS HERE */' +
'</style>' +
'<my-directive></my-directive>' +
+ '</div>');
$compile(element)(scope);
... aber kein Glück noch ... Ich habe auch versucht, den Test Läufer aus PhantomJS zu wechseln zu Chrome, aber das Problem ist das gleiche: Stil irgendwie ignoriert werden (sie injiziert werden, aber sie bekommen nicht auf Elemente angewandt wird, in der Tat jQuery(targetElement).css('width')
mit es gibt 0) ...
so, meine große Frage: Wie soll ich Stylesheet importieren und erfolgreich in Karmatests anwenden ??? :(
ich stark Beratung um ein afterJedes (function() { Element hinzuzufügen.remove() }) beim Anhängen eines Elements an das DOM in Ihren Tests. Wenn Sie Tausende von Tests haben, werden sie sonst sehr langsam und Sie können auch Konflikte mit früheren Tests haben. – ValentinH