如何模拟单元测试的配置阶段提供程序



我正在编写一个规范,用于检查在测试中的Angular模块的配置阶段是否调用了方法。

以下是正在测试的代码的简化视图:

angular.module('core',['services.configAction'])
    .config(function(configAction){
        configAction.deferIntercept(true);
    });

上面发生的是,我们定义了一个具有单个依赖项的core模块
然后,在core模块的config-块中,我们在services.configAction中给定要使用的configAction对象上调用deferIntercept方法。

我正在尝试测试core的配置是否调用了该方法。

这是当前设置:

describe('core',function()
{
    const configActionProvider={
        deferIntercept:jasmine.createSpy('deferIntercept'),
        $get:function(){
            return {/*...*/}
        }
    };
    beforeEach(function()
    {
        module(function($provide)
        {
            $provide.provider('configAction',configActionProvider);
        });
        module('core.AppInitializer');
        inject(function($injector)
        {
            //...
        });
    });
    it('should call deferIntercept',function()
    {
        expect(configActionProvider.deferIntercept).toHaveBeenCalledWith(true);
    });
});

问题是它没有覆盖configAction,因此永远不会调用spy,原始方法是。
如果我将其作为core模块的依赖项删除,它就会这样做,因此angular.module('core',[])而不是angular.module('core',['services.configAction'])将起作用,并且间谍将被调用。

知道如何在测试期间覆盖services.configAction而不将其从依赖列表中删除吗?

看看-https://dzone.com/articles/unit-testing-config-and-run.类似以下内容-

module('services.configAction', function (configAction) {
  mockConfigAction = configAction;
  spyOn(mockConfigAction, 'deferIntercept').andCallThrough();
});
module('core');

在你以前,每个人都可以胜任这份工作。

相关内容

  • 没有找到相关文章

最新更新