5
我有,而「初始化」從localStorage的加載數據的AngularJS服務(即在工廠函數),就像這樣:測試AngularJS服務初始化
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工廠。我在beforeEach鉤子中獲得了一個初始化的實例,因爲我需要測試myService的方法。我想我需要爲我的特定初始化測試創建一個不同的實例,但由於服務在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');
});
});
這可以實現嗎?我的代碼是否有難以測試的結構,還是我不尊重「角度方式」,這應該以不同的方式完成?