模拟localForage.getItem方法的最佳方法是什么?我只需要在调用localForage.getItem时返回一个示例对象。
发布于 2015-11-23 03:38:16
第一件事是将第三方库封装在一个可注入的服务中,这样您就可以在测试中交换一个模拟实现。
app.factory('localForage',function(){
//likely coming from global namesapce
return localForage;
});
然后可以将其注入指令、服务、控制器等。
//example with controller
myApp.controller('myCtrl',['localForage',function(localForage){
this.getItem = localForage.getItem;
this.setItem = loaclForage.setItem;
}]);
现在的想法是用测试中的模拟替换正常的实现。有几种方法可以做到:
beforeEach(module('myModule',function($provide){
$provide.factory('localForage', function(){
return MockImpl;
});
});
var ctrl;
beforeEach(inject(function($controller){
ctrl = $controller('myCtrl',{localForage:mockImpl});
}))
现在,关于模拟实现,它取决于您想要对它做什么(监视它、存根和其他事情),但是想法是让它实现与实际服务相同的api。
var mockImpl = {
getItem : angular.noop,
setItem : angular.noop
}
例如,如果您想检查是否调用了localForage以及使用了哪些参数(使用spyOn(mockImpl,'getItem')),那么这个简单的参数就可以了。
https://stackoverflow.com/questions/33863122
复制相似问题