2013-02-07 5 views
16

Ich versuche unter dem Code zu testen:Tests in AngularJS: Referenzfehler der Funktion inject

describe('myService test', function() { 
    describe('when I call myService.one', function() { 
     beforeEach(angular.module('TargetMarketServices')); 
     it('returns 1', inject(function (imagesRepository) { 
      expect(true).toEqual(true); 
     })); 

    }); 

}); 

Wenn dieser Code ausgeführt wird, ich diese Fehlermeldung erhalten:

TypeError: 'undefined' is not a function (evaluating 'this.func.apply(this.spec)') 
    at http://localhost:8080/testacular.js:76 
    at http://localhost:8080/context.html:35 
ReferenceError: Can't find variable: inject 
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:6 
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:8 
    at /home/peter/Dropbox/AngularJS/set-component/test/sets/sets-ihm.js:10 

PhantomJS 1,8: Ausgeführt 1 3 (1 FEHLGESCHLAGEN) (übersprungen 2) (0.072 Sek/0.01 Sek)

Für meinen Test verwende ich Testacular mit Jasmine und PhantomJS.

Antwort

13

Die Zeile, in

beforeEach(angular.module('TargetMarketServices')); 

beforeEach(module('TargetMarketServices')); 

Wenn Sie einen Blick auf die angular-phonecat Projekt in Test/Einheit/directivesSpec.js nutzt

beforeEach(module('myApp.directives')); 
haben sollte

Wenn ich es ändere, um angular.module stattdessen zu verwenden:

beforeEach(angular.module('myApp.directives')); 

dann bekomme ich diese Fehlermeldung, wenn testacular auch hier:

TypeError: 'undefined' is not a function (evaluating 'this.func.apply(this.spec)') 
+3

Aber, wenn ich nur Modul verwende, erhalte ich den Fehler "ReferenceError: Kann Variable nicht finden: Modul" – ChriX

+0

Sorry, ich meinte [angular-seed] (https://github.com/angular/angular-seed) früher, nicht angular-phonecat. Sie erhalten diesen ReferenceError, nehme ich an, weil Sie [angular-mocks.js] nicht haben (https://github.com/angular/angular-seed/blob/master/test/lib/angular/ angular-mocks.js) in Ihrer testacular Unit-Test-Konfigurationsdatei. –

+1

Das Problem wurde gelöst, indem die Datei angular-mocks.js genommen wurde. – ChriX

26

AngularJS bietet zwei Testbibliotheken:

  • Winkel mocks.js
  • Winkel scenario.js

angular-mocks wird für Jasmin und Karma Testin verwendet G. Es veröffentlicht die globalen Methoden modul() und inject(), die in Ihren Jasmine-Spezifikationstests verwendet werden. Das bedeutet, dass Sie das Skript angular-mocks.js laden müssen (nachdem Sie die angular.js-Bibliothek/das Skript geladen haben)

Das eckige Szenario wird nur für e2e-Tests verwendet.