Ich habe Schwierigkeiten, eine Factory-Methode vom Karma-Unit-Test aus aufzurufen.angularjs - Komponententest, unfähig, Factory-Methode aufzurufen
Es besagt, dass die Methode, die ich aufrufen möchte (load()
) nicht existiert.
Hier ist der Code:
unitTest.js
describe('Data Factory', function() {
var DataFactory, scope, spy;
beforeEach(module('App'));
beforeEach(inject(function($injector, $rootScope, _ZoneData_) {
var DataFromjson;
scope = $rootScope.$new();
DataFromjson = _ZoneData_;
return spy = spyOn(DataFromjson, 'load');
}));
return it('Should Load the right data from the json file', function() {
var test;
test = DataFactory;
console.log(test);
return expect(DataFactory).toBeDefined();
});
});
und hier ist der Werkscode:
angular.module('services', ['ngResource']).factory('ZoneData', [
'$http', '$stateParams', function($http, $stateParams) {
var ZoneData;
ZoneData = function(Data) {
if (Data) {
return this.setData(Data);
}
};
ZoneData.prototype = {
setData: function(Data) {
return angular.extend(this, Data);
},
load: function(id) {
var scope;
scope = this;
return $http.get('default-system.json').success(function(Data) {
return scope.setData(Data.data);
}).error(function(err) {
return console.error(err);
});
},
filtered: function() {
var scope;
scope = this;
return $http.get('default-system.json').success(function(Data) {
return angular.forEach(Data.data, function(item) {
var urlZoneId;
urlZoneId = parseInt($stateParams.zoneID);
if (item.iID === urlZoneId) {
return scope.setData(item);
}
});
});
}
};
return ZoneData;
}
])
jede Hilfe mit etwas Erklärung wird wirklich, wirklich geschätzt. Danke
Ist nicht load() eigentlich ZoneData.prototype.load() und nicht nur ZoneData.load()? – Jagrut
Wie Sie sehen können, habe ich eine console.log in meinem Test, und das ist das Ergebnis: Funktion (Daten) { if (Data) { Rückgabe this.setData (Data); } Wenn es in irgendeiner Weise hilft } – Nick
Ich möchte Zonedata.prototype.load() aufrufen, in meinem Controller, rufe ich diese Methode wie folgt auf: $ scope.zones = new ZoneData(); $ scope.zones.load(); – Nick