加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

单元测试具有依赖性的AngularJS工厂

发布时间:2020-12-17 09:07:41 所属栏目:安全 来源:网络整理
导读:当单元测试一个Angular工厂(使用Karma Jasmine)时,如何将一个stub依赖注入到测试的工厂? 这里是我的工厂: mod = angular.module('myFactoryMod',[]);mod.factory('myFactory',[ '$log','oneOfMyOtherServices',function($log,svc) { return makeSomething
当单元测试一个Angular工厂(使用Karma Jasmine)时,如何将一个stub依赖注入到测试的工厂?

这里是我的工厂:

mod = angular.module('myFactoryMod',[]);

mod.factory('myFactory',[
  '$log','oneOfMyOtherServices',function($log,svc) {
    return makeSomethingThatDoesSomethingWithTheseDependencies($log,svc);
  }
]);

当实例化我的工厂时需要oneOfMyOtherServices。

这里是我的测试:

it('can get an instance of my factory',function() {
  var oneOfMyOtherServicesStub;

  angular.mock.module('myFactoryMod');

  oneOfMyOtherServicesStub = {
    someVariable: 1
  };

  //****How do I get my stub in my target? ****

  angular.mock.inject(['myFactory',function(target) {

      expect(target).toBeDefined();

    }
  ]);
})

N.B.我知道$控制器允许这个控制器,但我没有看到一个等价的工厂。

有两种方法来完成这样的事情,我知道:

>使用$ provide和一个匿名模块注入模拟。
>注入你想要模拟的服务,并使用茉莉花的间谍能力提供模拟值。

第二个选项只有当你确切知道测试中的代码将调用注入的服务,你可以很容易地模拟它们的工作。由于您似乎正在访问服务(而不是方法)上的数据属性追求第一个选项可能是最好的。

使用$ provide大致看起来像这样:

describe('myFactory',function () {
  // Load your module.
  beforeEach(module('myFactoryMod'));

  // Setup the mock service in an anonymous module.
  beforeEach(module(function ($provide) {
    $provide.value('oneOfMyOtherServicesStub',{
        someVariable: 1
    });
  }));

  it('can get an instance of my factory',inject(function(myFactory) {
    expect(myFactory).toBeDefined();
  }));
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读