gpt4 book ai didi

angularjs - 测试 Chrome 存储 API 包装器

转载 作者:行者123 更新时间:2023-12-03 08:21:45 24 4
gpt4 key购买 nike

我正在使用 AngularJS 开发 Chrome 应用程序。由于我的应用程序使用 chrome.storage 我写了包装器:

angular.module('myApp').factory('chromeStorageApi', function($window){
if(typeof $window.chrome.storage == 'undefined')
return false;

return{
set:function(obj, callback){
$window.chrome.storage.local.set(obj, callback)
return true;
},
.............................
}
}

我违反了 TDD 方法,现在我想测试我的包装器。但是我所有的尝试都没有成功。例如,我试图检查 $window.chrome.storage.local.set() 是否具有与 chromeStorageApi.set() 相同的参数,但我找不到我如何模拟 $window.chrome.storage.local 的一种方式。

更新:

我的最后一个单元测试版本:

describe('chromeStorageApi', function(){

beforeEach(module('myApp'));

it('should be able to set data to the storage', inject(function(chromeStorageApi, $window){
spyOn($window.chrome.storage.local, 'set')
chromeStorageApi.set({'key':'value'}, function(){ }());
expect($window.chrome.storage.local.set).toHaveBeenCalled();
expect($window.chrome.storage.local.set).toHaveBeenCalledWith({'key':'value'}, function(){ }());

}));
});

但是我得到一个错误:

TypeError: 'undefined' is not an object (evaluating '$window.chrome.storage')

最佳答案

我为我做了工作测试。这里有:

describe('chromeStorageApi', function(){
var mockWindow, chromeStorageApi;

beforeEach(module('myApp'));

beforeEach(function(){
mockWindow = {
chrome:{
storage:{
local: sinon.stub({
set: function(){ },
get: function(){ },
remove: function(){ },
clear: function(){ }
})
}
},
addEventListener: function(){ }
}
module(function($provide){
$provide.value('$window', mockWindow);
})
})

beforeEach(inject(function(_chromeStorageApi_){
chromeStorageApi =_chromeStorageApi_;
}))

it('should be able to set data to the storage', function(){
chromeStorageApi.set({'key':'value'}, function(){ }());
expect(mockWindow.chrome.storage.local.set).toHaveBeenCalled();
expect(mockWindow.chrome.storage.local.set).toHaveBeenCalledWith({'key':'value'}, function(){ }());

});

it('should be able to get data from the storage', function(){
chromeStorageApi.get('key', function(){ });
expect(mockWindow.chrome.storage.local.get).toHaveBeenCalled();
expect(mockWindow.chrome.storage.local.get).toHaveBeenCalledWith('key');
})
})

我正在使用 sinonJS使用方法创建 stub 。我希望它会对某人有所帮助。

关于angularjs - 测试 Chrome 存储 API 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22487738/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com