angularjs - 单元测试,无法调用工厂方法
angularjs - unit test, unable to call factory method
我很难尝试从业力单元测试调用工厂方法。
它说我尝试调用的方法 (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;
}
])
如果您能提供一些解释,我们将不胜感激。谢谢
这是你的工厂实现问题,而不是测试问题。
Angular 中的工厂应该 return 一个对象,而你 returning 是一个对象 'constructor' 函数。
一个简单的解决方案是将工厂的 return 值更改为
return new ZoneData();
而不是 returning
return ZoneData;
请检查这个 plunkr http://plnkr.co/edit/O8wnmgSQ8mc9t93jKDJ6?p=preview。
我创建了一个精简版的工厂来演示这个概念。
谢谢。
我很难尝试从业力单元测试调用工厂方法。
它说我尝试调用的方法 (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;
}
])
如果您能提供一些解释,我们将不胜感激。谢谢
这是你的工厂实现问题,而不是测试问题。 Angular 中的工厂应该 return 一个对象,而你 returning 是一个对象 'constructor' 函数。
一个简单的解决方案是将工厂的 return 值更改为
return new ZoneData();
而不是 returning
return ZoneData;
请检查这个 plunkr http://plnkr.co/edit/O8wnmgSQ8mc9t93jKDJ6?p=preview。 我创建了一个精简版的工厂来演示这个概念。
谢谢。