Ich kann diese beiden Spec-Dateien nicht gut miteinander spielen. Ich dachte nicht, dass Spec-Dateien andere Spec-Dateien beeinflussen würden, aber in diesem Fall scheint es so, als ob sie es tun würden, es ergibt für mich keinen Sinn.Angular Mocking in Jasmine Unbekannter Anbieter
Ich verwende Jasmin und Karma die Tests automatisiert mit Gulp
Der Fehler Ich erhalte ist "Unknown Anbieter: ProductServiceProvider < - Productservice"
I habe die Tests geändert, um das Problem zu beheben, hier sind die einfachen Versionen.
Wenn ich die folgende Zeile in Datei 2 auskommentieren, übergeben beide Dateien.
Es hat etwas mit dem Mocking des Moduls zu tun, aber ich kann nicht herausfinden, was ich hier falsch mache.
Spec-Datei 1
describe('Testing euProduct', function(){
var $factory;
var $httpBackend;
beforeEach(function() {
//modules
module('eu.product.service');
//injections
inject(function($injector){
$factory = $injector.get('ProductService');
$httpBackend = $injector.get('$httpBackend');
});
//mock data
$httpBackend.when('GET', '/Mercury/product/list/0/0?PrimaryCategoryID=0&pageSize=20&startPage=1').respond({
"data":
[{
"recallid":45,
}]
});
});
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
//-----Tests----
it('Should be able to get data from the server on default parameters.', function(){
$factory.list({},function(data){
expect(data.data[0].recallid).toBe(45);
});
$httpBackend.flush();
});
});
Spec-Datei 2
'use strict';
beschreiben ('Testing euProduct Logic', function() {
//variables in closure scope so they can be used in tested but set with injection in beforeEach
var $factory;
//mocking a module :: http://www.sitepoint.com/mocking-dependencies-angularjs-tests/
beforeEach(function() {
angular.module('eu.product.service',[]);
module(function($provide) {
$provide.factory('ProductService', function() {
// Mocking utilSvc
return {
list : function(para, callback){
callback({
data : {
product : 'The product Name'
}
})
}
};
});
$provide.service('storageSvc', function() {
// Mocking storageSvc
});
});
//modules
module('eu.product.logic');
//injections
inject(function($injector){
$factory = $injector.get('ProductLogic');
});
});
//-----Tests----
it('Should be able to run tests', function(){
expect(2).toBe(2);
});
});
Last tun Modul wie diese 'angular.module (‚eu.product.service‘)' –
Ich drehe das Modul einge es nicht spöttisch so, wenn ein Fehler mit der EU ist. product.service-Modul wird nicht im eu.service.logic-Test angezeigt. Wie würden Sie es verspotten, anstatt es zu importieren? –
Die Art und Weise, wie Sie gerade arbeiten, besteht darin, ein neues Modul zu erstellen, das alle registrierten Komponenten ausspült. Was wollten Sie in 'eu.product.service' vortäuschen? –