如何模拟服务并将其注入其他服务?

时间:2014-08-05 08:14:01

标签: angularjs service mocking

我有一项正在测试的服务:

angular.module('services', []).
  service('myService', function(topService) {});

topService是另一个angularjs服务。

现在我想为myService编写单元测试,但我需要模拟topService并将其传递给myService。

我试过但不确定如何让它发挥作用:

define(['angular', 'angularMocks', 'services/my'], function(_, mocks, _) {

    beforeEach(mocks.module('services'));

    describe("my service", function() {

        it("should do something", mocks.inject(function(myService) {
            // how to mock and inject a `topService` to `myService` ????
            expect(myService).doSomething().toEqual("???");
        }));
    });
});

怎么做?

1 个答案:

答案 0 :(得分:1)

首先创建mockedTopService,提供运行测试所需的任何函数:

var mockedtopService = {
    doSomething: function() {
        return "test";
    }
};

然后使用$ provide:

将其提供给角度
beforeEach(function () {
    module(function ($provide) {
        $provide.value('topService', mockedtopService );
    });
}

如果您需要通过角度获取服务实例,可以这样做:

inject(function (topService) {
    var topServiceInstance = topService;
});