如何在 jasmine-karma 单元测试中为 LocalForage.getItem() 方法创建模拟?
How to create a mock for LocalForage.getItem() method in jasmin-karma unit tests?
模拟 localForage.getItem 方法的最佳方法是什么?当调用 localForage.getItem 时,我只需要简单地 return 一个示例对象。
第一件事是将第三方库包装在可注入服务中,这样您就可以在测试中换成模拟实现
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('myMockModule'))) 而不是实际的 localForage 模块
基于测试套件:在 运行 测试之前“$provide”一个不同的实现:
beforeEach(module('myModule',function($provide){
$provide.factory('localForage', function(){
return MockImpl;
});
});
- 在某些情况下,您可以直接注入模拟实现:
var ctrl;
beforeEach(inject(function($controller){
ctrl = $controller('myCtrl',{localForage:mockImpl});
}))
现在关于模拟实现,它取决于您想用它做什么(监视它、存根、其他东西),但我们的想法是让它实现与实际服务相同的api[=15] =]
var mockImpl = {
getItem : angular.noop,
setItem : angular.noop
}
例如,如果您想检查是否调用了 localForage 以及使用哪些参数(使用 spyOn(mockImpl, 'getItem'))
,这个简单的方法就可以了
模拟 localForage.getItem 方法的最佳方法是什么?当调用 localForage.getItem 时,我只需要简单地 return 一个示例对象。
第一件事是将第三方库包装在可注入服务中,这样您就可以在测试中换成模拟实现
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('myMockModule'))) 而不是实际的 localForage 模块
基于测试套件:在 运行 测试之前“$provide”一个不同的实现:
beforeEach(module('myModule',function($provide){
$provide.factory('localForage', function(){
return MockImpl;
});
});
- 在某些情况下,您可以直接注入模拟实现:
var ctrl;
beforeEach(inject(function($controller){
ctrl = $controller('myCtrl',{localForage:mockImpl});
}))
现在关于模拟实现,它取决于您想用它做什么(监视它、存根、其他东西),但我们的想法是让它实现与实际服务相同的api[=15] =]
var mockImpl = {
getItem : angular.noop,
setItem : angular.noop
}
例如,如果您想检查是否调用了 localForage 以及使用哪些参数(使用 spyOn(mockImpl, 'getItem'))
,这个简单的方法就可以了