我有一个 AngularJS 服务,它在“初始化”(即在工厂函数中)时从 localStorage 加载数据,如下所示:
module.service('myService', function ($localStorage) {
var data = $localStorage.data;
if (!isValid(data)) // isValid omitted on purpose, not relevant.
data = undefined;
return {
getData: function() {
return data;
}
setData: function(value) {
if (isValid(value))
data = value;
}
};
}
在我的测试中,我想检查 data
是否实际从 localStorage 加载,如果该值存在并且有效;这不是关于测试 isValid,而是关于使用它和 $localStorage 的服务初始化。
我希望能够在我的测试中调用 myService 工厂。因为我还需要测试 myService 的方法,所以我在 beforeEach Hook 中获得了它的初始化实例。我想我需要为我的特定初始化测试创建一个不同的实例,但由于服务在 AngularJS 中是单例的,我不确定这是否可以完成。
describe('myService', function() {
myService = $localStorage = null;
beforeEach(module('app'));
beforeEach(inject(function($injector) {
myService = $injector.get('myService');
$localStorage = $injector.get('$localStorage');
});
it('should look for stuff in localStorage on creation', function () {
$localStorage.data = 'my data';
// I'd like to call service factory here!!
myService.getData().should.equal('my data');
});
});
这能实现吗?我的代码是否具有难以测试的结构,或者我是否不尊重“Angular 方式”并且应该以不同的方式进行?
最佳答案
试试这个:
describe('myService', function() {
myService = $localStorage = null;
beforeEach(module('app'));
beforeEach(inject(function($injector) {
$localStorage = $injector.get('$localStorage');
$localStorage.data = 'my data';
myService = $injector.get('myService');
});
it('should look for stuff in localStorage on creation', function () {
myService.getData().should.equal('my data');
});
});
关于javascript - 测试 AngularJS 服务初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21958339/