2016-05-04 11 views
0

Ich bemühe mich sehr, den Komponententest eines Angular-Projekts zu starten, aber ich kämpfe, um eine AngularJS-Fabrik zu testen, die Abhängigkeiten aufweist.Testen der eckigen Fabrik

Meine Fabrik hat 5 Abhängigkeiten, aber ich kann nicht einmal eine Testfunktion bekommen, die nur testet, dass die Fabrik definiert ist. Hier ist ein Beispielcode für das, was ich gerade mache. Ich habe versucht, injizieren verwenden, bieten $ ect aber ich halte entlang der Linien von

"Configuration parameter should be an object, instead it is a: undefined" 

einen Fehler bekommen Hier ist der Test so weit, ich habe in links auf Kommentar Code zu zeigen, was ich habe versucht:

(function() { 

'use strict'; 

describe('While working with the channelService', function(){ 

var sut, 
    q, 
    filter, 
    common, 
    dataContext, 
    etCommon; 

beforeEach(function(){ 

    // Load the module 
    module('app'); 
    module('app.inventory'); 
    module('blocks.router'); 

    inject(function($injector){ 
    sut = $injector.get('channelService'); 
    q = $injector.get('$q'); 
    filter = $injector.get('$filter'); 
    common = $injector.get('common'); 
    dataContext = $injector.get('dataContext'); 
    etCommon = $injector.get('etCommons'); 

    spyOn(q, 'defer'); 
    spyOn(filter , 'defer'); 
    spyOn(common, 'makeStruct'); 
    spyOn(q, 'defer'); 
    spyOn(q, 'defer'); 
    }); 




describe('should define the following publicly', function(){ 
    it('should be defined itself', function(){ 
     expect(sut).toBeDefined(); 
    }); 
}); 

});

})();

SErvice ist entlang der Linien von

(function() { 

angular.module('app.inventory').factory('channelService', [ 
    '$q', '$filter', 'common', 'dataContext', 'etCommon', 
    function ($q, $filter, common, dataContext, etCommon) { 
... 

... 
]); 

}()); 
+0

Post-Service-Definition verwenden, entfernen Sie alle auf Kommentar Code aus Ihrer Frage, und posten die vollständige und genaue Fehlermeldung. –

+0

In Ihrem Test erhalten Sie 'etCommons' vom Injektor. Aber der Dienst heißt "etCommon". BTW, warum den Injektor verwenden, und nicht einfach die Dienste direkt in den Test injizieren? 'inject (function (channelService, $ q, $ filter, ...) {' –

+0

Wenn ich nur den eigentlichen Dienst einschalte, sollte ich zumindest erwarten können, dass es definiert wird, sollte ich nicht, ohne alle zu verspotten Abhängigkeiten beforeEach (inject (Funktion (KanalService) { sut = channelService; })); –

Antwort

0

Versuchen ngMock in Ihrem before

https://docs.angularjs.org/api/ngMock 
Verwandte Themen