如何在AngularAMD应用程序单元测试中模拟服务

时间:2015-06-24 12:54:54

标签: javascript angularjs unit-testing angular-amd

我有一个使用AngularAMD和require.js的角度应用程序。我想嘲笑像这样的服务:

module(function ($provide) {
    $provide.service('ToolsService', function () {
        var toolsServiceMock = {
          someMethod: function () { }
        };
        return toolsServiceMock;
    });
});

并注入它:

angularAMD.inject(function ($injector) {
    toolsService = $injector.get('ToolsService');
});

但$ injector给了我真正的服务,而不是我的模拟。从不调用函数($ provide)。

当我将angularAMD.inject()更改为angular inject()时,我得到了模拟,但其他应用程序组件不起作用。

如何告诉angularAMD使用模拟代替实际实现?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作以使用angularAMD测试服务。

define(['app','angularAMD'],function(app,angularAMD){
    'use-strict';
    describe('ToolsService',function(){
        // load the controller's module
        beforeEach(angular.mock.module('appModule'));
        var moduleToInject;
        // Initialize the controller and a mock scope
        beforeEach(function(){
            angularAMD.inject(function ('ToolsService') {

            });
        }); 
        it('should check all methods', function() {

            //code to test


        });
    });
});