首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在jasmin-业力单元测试中为LocalForage.getItem()方法创建一个模拟?

如何在jasmin-业力单元测试中为LocalForage.getItem()方法创建一个模拟?
EN

Stack Overflow用户
提问于 2015-11-23 03:00:50
回答 1查看 1.3K关注 0票数 0

模拟localForage.getItem方法的最佳方法是什么?我只需要在调用localForage.getItem时返回一个示例对象。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-23 03:38:16

第一件事是将第三方库封装在一个可注入的服务中,这样您就可以在测试中交换一个模拟实现。

代码语言:javascript
运行
复制
app.factory('localForage',function(){
  //likely coming from global namesapce 
  return localForage;
});

然后可以将其注入指令、服务、控制器等。

代码语言:javascript
运行
复制
//example with controller

myApp.controller('myCtrl',['localForage',function(localForage){
   this.getItem = localForage.getItem;
   this.setItem = loaclForage.setItem;
}]);

现在的想法是用测试中的模拟替换正常的实现。有几种方法可以做到:

  • 全局:在运行测试之前创建一个模拟模块(它将为所有测试定义模拟实现),您将调用(beforeEach(模块(‘myMockModule’)),而不是实际的localForage模块
  • 在测试套件基础上:"$provide“--运行测试之前的不同实现:

代码语言:javascript
运行
复制
beforeEach(module('myModule',function($provide){
  $provide.factory('localForage', function(){
    return MockImpl;
  });
});

  • 在某些情况下,您可以直接注入模拟实现:

代码语言:javascript
运行
复制
var ctrl;

beforeEach(inject(function($controller){
   ctrl = $controller('myCtrl',{localForage:mockImpl});
}))

现在,关于模拟实现,它取决于您想要对它做什么(监视它、存根和其他事情),但是想法是让它实现与实际服务相同的api。

代码语言:javascript
运行
复制
var mockImpl = {
   getItem : angular.noop,
   setItem : angular.noop
}

例如,如果您想检查是否调用了localForage以及使用了哪些参数(使用spyOn(mockImpl,'getItem')),那么这个简单的参数就可以了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33863122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档