javascript - AngularJS 和 Jasmine : mocking services

标签 javascript angularjs jasmine angular-mock

我无法模拟以下服务“broadcaster”对服务“pushServices”的依赖关系。

angular.module('broadcaster', ['pushServices']);

angular.module('broadcaster').service('broadcaster', [
    '$rootScope', '$log', 'satnetPush',
    function ($rootScope, $log, satnetPush) {
        // .. contents ..
    };
};

Jasmine 规范如下:

describe('Test Broadcaster Service', function () {
    'use strict';

    var broadcasterService, mockPushService;
    beforeEach(module('broadcaster'));
    beforeEach(inject(function($injector) {

        broadcasterService = $injector.get('broadcaster');
        mockPushService = {
            getSomething: function () { return 'mockReturnValue'; }
        };

        module(function ($provide) {
            $provide.value('satnetPush', mockPushService);
        });

    }));

    it('should return a non-null broadcaster object', function () {
        expect(broadcasterService).not.toBeNull();
    });

});

我收到的错误是典型的“未知提供商”:

PhantomJS 1.9.8 (Linux) Test Broadcaster Service should return a non-null broadcaster object FAILED
    Error: [$injector:unpr] Unknown provider: $pusherProvider <- $pusher <- satnetPush <- broadcaster
    http://errors.angularjs.org/1.3.14/$injector/unpr?p0=%24pusherProvider%20%3C-%20%24pusher%20%3C-%20satnetPush%20%3C-%20broadcaster

我做错了什么?我应该如何注入(inject)依赖项?

最佳答案

关键是在从 $injector 获取测试服务之前先 $provide 你的模拟服务。然后“satnetPush”就会存在:

describe('Test Broadcaster Service', function () {
    'use strict';

    var broadcasterService, mockPushService;

    beforeEach(function() {
        module('broadcaster');

        module(function ($provide) {
            mockPushService = {
                getSomething: function () { return 'mockReturnValue'; }
            };

            $provide.value('satnetPush', mockPushService);
        });

        inject(function($injector) {
            broadcasterService = $injector.get('broadcaster');
        })
    });

    it('should return a non-null broadcaster object', function () {
        expect(broadcasterService).not.toBeNull();
    });
});

这是一个working fiddle

关于javascript - AngularJS 和 Jasmine : mocking services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106585/

相关文章:

javascript - AngularJS - var 未定义时的默认值

javascript - 表单提交后,加载微调器(ng-show=loading)始终为 true。接收数据后需要置为 false

javascript - 从 Karma/Jasmine 测试加载外部文件

javascript - 将 Div 缩放到智能手机宽度?

javascript - 如何拦截 XMLHttpRequest 并更改请求 URL

javascript - 如何知道JavaScript已执行的函数名称?

angularjs - 关闭 AngularStrap 弹出框

javascript - 如果页面上的所有图像都返回错误重定向?

angularjs - 如何使用在 App Config 中初始化的 Angular Translate 测试 Controller ?

javascript - 从 element.all Protractor 返回计数总和