Ich arbeite an einer TDD für AngularJS (eine andere Geschichte überhaupt) und geriet in eine Situation, in der meine beforeEach-Anrufe anscheinend nicht ausgeführt werden. Ich habe es auf das folgende Beispiel reduziert.
Dies funktioniert, wie die Tatsache zeigt, dass die console.log-Nachrichten in beforeEach und beide angezeigt werden:
%Vor% Dies funktioniert nicht, wie die Tatsache zeigt, dass die console.log-Nachricht in der beforeEach-Datei NICHT angezeigt wird und beim Versuch, $ log.info zu versuchen, fehlschlägt und die folgende Fehlermeldung auslöst: TypeError: Cannot read property 'info' of undefined
Ich verwende Angular 1.3.15, Karma 0.12.31, Jasmin 2.3.4. Wahrscheinlich etwas Offensichtliches, das ich übersehe ...
BEARBEITEN : Michael Radionovs Erklärung ist sehr hilfreich; Ich verstehe jedoch nicht, warum dieser geänderte Code immer noch denselben Fehler verursacht.
%Vor%Außerdem scheint der Code in "module ('userApp' ..." nie ausgeführt zu werden ...?
Der Grund dafür, dass Ihre Protokollnachricht console.log("in beforeEach...");
nicht angezeigt wird, liegt darin, dass sie nicht in beforeEach
liegt, sondern in einer anonymen Funktion, die an ein module(..)
als Argument übergeben wird, das von angular als Modul betrachtet wird -Hüften. Dieses Modul wird nur ausgeführt, wenn die Injektion stattfindet und Sie gleichzeitig eine Protokollmeldung in beforeEach...
erhalten, aber es gibt keine Injektion in Ihrem Test, so dass es nie passiert. beforeEach
wird trotzdem ausgelöst, du hast console.log
einfach nicht an die richtige Stelle gesetzt; es wird funktionieren:
Es scheint auch, dass Sie vergessen haben, spottes $log
in Ihre Testsuite zu injizieren, Ihre $log
Variable erhält niemals einen Wert, so bleibt sie undefiniert, wie der Fehler angibt.
Siehe den Plott: Ссылка
Dokumente:
Tags und Links angularjs tdd karma-jasmine