2016-06-13 11 views
0

Erste Einheit Testfälle in der MitteRegistrieren von Dienstleistungen in einem Modul und einschließlich von abhängigen Module in Jasmin

Fest mit jasmine.But schreiben Ich habe ein Modul namens „app“ es in einer js-Datei mit Konfigurations deklariert und laufen Blöcke ,,, in der gleichen Datei, während ein Modul zu schaffen, erwähnen i seine dependeny Module als auch ...

var app; ------> it is declared as a global variable 
    app=angular.module('app,['ngSanitize','Deepak']); 
app.run(['$rootScope', '$window', '$anchorScroll', '$timeout', 'resources', function($rootScope, $window, $anchorScroll, $timeout, resources) 

dann in anderen js Dateien, in denen Controller app.js, Fabrik , Dienstleistungen und düster ctives geschaffen werden, unter Linien

wurden verwendet, um
angular.module('app').factory 
angular.module('app').controller 
angular.module('app').service 
angular.module('app').filter 

So bedeutet es am Hinzufügen der Regler, Filter, Betriebs- und Service an das bestehende Modul namens ‚App‘

nun eine Einheit Testfall erstellen werde, das Modul wie unten

DemoToTheTeam.js

beforeEach(function() {  
angular.module('app'); 
}); 

Ist die obige Zeile bedeutet, es auch bin Laden lo ading 'Deepak' und 'ngSanitize' Modul auch (wie es als eine Abhängigkeit früher an der Spitze erklärt wurde)

Und egal wie oft ich renne geben die relativen Pfade aller js-Dateien in meiner Anwendung nach eckigen -mock Dateien im karma.conf.js..It ist nach wie vor nicht in der Lage, die Fabrik Service

zu injizieren es einfach Unknown Anbieter mit dem Service name..Along mit Erklärung Fehlern zeigt, wie unten

Error: [$injector:unpr] Unknown provider: InformationServiceProvider <- InformationService 
http://errors.angularjs.org/1.5.6/$injector/unpr?p0=ServiceProvider%20%3C-%20InformationService 
    at C:/jasmine/project/node_modules/angular/angular.js:68:12 
    at C:/jasmine/project/node_modules/angular/angular.js:4501:19 
    at Object.getService [as get] (C:/jasmine/project/node_modules/angular/angular.js:4654:39) 
    at C:/jasmine/project/node_modules/angular/angular.js:4506:45 
    at Object.getService [as get] (C:/jasmine/project/node_modules/angular/angular.js:4654:39) 
    at Object.<anonymous> (C:/jasmine/project/tests/DemoToTheTeam.js:79:25) 
    at Object.invoke (C:/jasmine/project/node_modules/angular/angular.js:4708:19) 
    at Object.workFn (C:/jasmine/project/node_modules/angular-mocks/angular-mocks.js:3071:20) 
Error: Declaration Location 
    at window.inject.angular.mock.inject (C:/jasmine/project/node_modules/angular-mocks/angular-mocks.js:3033:25) 
    at Suite.<anonymous> (C:/jasmine/project/tests/DemoToTheTeam.js:78:12) 
    at C:/jasmine/project/tests/DemoToTheTeam.js:2:1 

Bin verwirrt darüber, warum mein Dienst nicht anerkannt und verspottet wird ??? Gibt es irgendeinen Hinweis darauf, warum dies geschieht, obwohl ich den korrekten relativen Pfad der js-Dateien in der Karma-Datei angegeben habe?

In einigen Stellen habe ich gesehen, dass auch die Dienste, die Steuerung und Richtlinien, die im Testfall geladen werden können

angular.module('app')['_invokeQueue'].forEach(function(value){ 
console.log(value[1] + ": " + value[2][0]); 
}) 

Aber ich sehe nur wenige Dienste in der Konsole gedruckt werden, und nicht alle geladen Dienste werden geladen, aber alle werden mit angular.module ('app') erstellt. factory syntax -> erstellt im vorhandenen Modul..kann nicht herausfinden, warum bestimmte Dienste nicht geladen werden, obwohl ich seinen relativen Pfad in der Karma-Datei

Dies ist mein Werksdienst (LanguagesService .js)

angular.module('app').factory('LanguagesService', function(){ 
    var lng = {}, 
    _languages = ['en', 'es', 'fr']; 

    lng.get = function() { 
    return _languages; 
    } 

    return lng; 
}); 

Bin Schaffung der oben Fabrik-Service in einem vorhandenen Modul

Spec-Datei

describe('Test LanguagesService ', function() { 

var mockService; 

beforeEach(function() { 

    angular.module('app'); 

}); 

beforeEach(inject(function ($injector) { 

    mockService = $injector.get('LanguagesService'); 

})); 


it('Should call foo fn', function() { 

    mockService.getmessages(); 
    }); 

}); 

Antwort

0

Q.- Bedeutet die obige Zeile, dass auch 'Deepak' und 'ngSanitize' Modul geladen wird (wie oben als Abhängigkeit deklariert)

Ans. - Ja. Es wird alle diese Module automatisch laden. Das Problem ist, dass Sie den Service InformationService nicht in die Testspezifikationsdatei eingefügt haben, für die Sie die Testfälle schreiben. Das ist es, was der Fehler sagt.

Ich schlage vor, Sie sehen this answer für die entsprechende Syntax.

UPDATE:

Was Spec-Datei betrifft, so versuchen, diese Syntax.

describe('Service: InformationService', function() { 

    var InformationService; 
    beforeEach(module('app')); 

    beforeEach(inject(function (_InformationService_) { 
     InformationService = _InformationService_; 
    })); 


    it('Should call foo fn', function() { 
     InformationService.getmessages(); 
    }); 
}); 
+0

Es hat keine abhängigen Dienst .. – user2918673

+0

Ja Added die Spec-Datei – user2918673

+0

Zuvor hatte der Name der Fabrik Service in den Fehler log..No bin immer Fehler ich erhielt: [$ Injektor: UNPR] Unknown provider: resourcesProvider <- resources ------> ohne den Factory-Service-Namen – user2918673