2016-07-06 9 views
2

Ich versuche, ein grundlegendes Komponententest-Beispiel zu erhalten. Das alles funktioniert gut mit diesemWie wird ngRoute in den Jasmine/Karma AngularJS Unit Test injiziert?

var whapp = angular.module('whapp', []) 
.filter('reverse',[function(){ 
    return function(string){ 
     return string.split('').reverse().join(''); 
    } 
}]); 

app.js und diese spec.js

describe('Filters', function(){ //describe your object type 
    beforeEach(module('whapp')); //load module 
    describe('reverse',function(){ //describe your app name 
     var reverse, rootScope; 
     beforeEach(inject(function($filter){ //initialize your filter 
      reverse = $filter('reverse',{}); 
     })); 
     it('Should reverse a string', function(){ //write tests 
      expect(reverse('rahil')).toBe('lihar'); //pass 
     }); 
    }); 
}); 

mit diesem Karma Dateien

files: [ 
    'node_modules/angular/angular.js', 
    'node_modules/angular-mocks/angular-mocks.js', 
    'node_modules/angular-mocks/angular-route/angular-route.js', 
    'node_modules/angular-mocks/angular-ui-router/release/angular-ui-router.js', 
     'app/js/*.js', 
     'tests/*.js' 
] 
Config

Das Problem tritt auf, wenn ich versuche ngRoute zu injizieren in mein Modul in app.js so

var whapp = angular.module('whapp', ['ngRoute']) 
.filter('reverse',[function(){ 
    return function(string){ 
     return string.split('').reverse().join(''); 
    } 
}]); 

In diesem Fall ich folgende Fehlermeldung in Karma erhalten [UPDATE: Dieser Fehler tritt auf, auch wenn ich, wie oben gezeigt, nicht die Winkel mock.js Bibliothek in Karma laden]

TypeError: undefined is not a constructor (evaluating 'reverse('rahil')') in tests/spec.js (line 9) 

So ... wie tun Ich injude ngRoute korrekt in spec.js? Ich habe verschiedene Dinge ausprobiert, von denen keine funktionierte.

+0

Was passiert, wenn Sie den Mock von ng-route nicht laden, sondern nur den in angular.js laden? –

+0

@Amy Blankenship. Ich bekomme den Fehler beschrieben. Ich lade nicht den Mock von ng-route, weil ich nicht weiß wie ... genau das ist die Frage - wie kann ich den Mock von ng-route laden? Es sei denn, Sie sprechen über das Dateiattribut in der Karma-Konfiguration? Wenn ich diese entferne, bekomme ich immer noch den gleichen Fehler. – geoidesic

+1

Ähm, du bist absolut, es sei denn, es ist nur eine Phantomdatei, die nicht im Pfad ''node_modules/angular-mocks/angular-route/angular-route.js'' existiert. Wenn es dort nicht existiert, könnte das das Problem verursachen. –

Antwort

2

Anscheinend erhalten Sie diesen Fehler, weil PhantomJS Ihr eckiges Hauptmodul whapp nicht instanziiert. Ein möglicher Grund ist, dass die Datei node_modules/angular-mocks/angular-route/angular-route.js fehlt.

Offensichtlich verwenden Sie npm, um Ihre Abhängigkeiten zu verwalten. So versuchen, Ihre aktuelle Datei zu ersetzen:

node_modules/angular-route/angular-route.js 

Das gleiche gilt für das ui-route Modul:

node_modules/angular-ui-router/release/angular-ui-router.js 

Ich hoffe, dies wird Ihnen helfen.

+0

Danke. Ich war ein wirklich doof n00b ... im Grunde waren die Einschlusswege in Karma config falsch, wie einige Kommentatoren versuchten, wenn auch in weniger klarer Sprache aufzuzeigen. Gut gemacht! – geoidesic

+1

Gern geschehen. Nur ein Tipp, beim nächsten Mal versuchen, auf Chrom zu wechseln, wird es einen sinnvollen Fehler werfen! –