我很难从karma单元测试中调用工厂方法。
它说我试图调用的方法(load()
)不存在。
以下是代码:
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();
});
});
这是工厂代码:
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;
}
])
任何有关解释的帮助都会非常感激。谢谢
答案 0 :(得分:1)
这是您的工厂实施而不是测试的问题。 Angular中的工厂应该返回一个对象,而你返回的是一个对象'构造函数'功能
一个简单的解决方案是将工厂的返回值更改为
return new ZoneData();
而不是返回
return ZoneData;
请检查此plunkr http://plnkr.co/edit/O8wnmgSQ8mc9t93jKDJ6?p=preview。 为了演示这个概念,我创建了工厂的精简版。
感谢。