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

前端之家收集整理的这篇文章主要介绍了单元测试具有依赖性的AngularJS工厂前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当单元测试一个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();
  }));
});

猜你在找的Angularjs相关文章