【问题标题】:Jasmine: mocking Bower libraryJasmine:模拟 Bower 库
【发布时间】:2015-03-01 05:24:20
【问题描述】:

我正在尝试创建一个模拟来测试依赖于由 bower 管理的另一个服务的服务。 Jasmine 测试的代码如下(完整示例在plunker):

describe('jsonrpc', function() {
    'use strict';

    var uuidMock, $httpBackend, jsonrpc;

    beforeEach(module('jsonrpc', function ($provide) {
        uuidMock = {};
        uuidMock.generate = function () { return 0; };
        $provide.value('uuid', uuidMock);
    }));

    beforeEach(inject(function(_jsonrpc_, _$httpBackend_) {
        jsonrpc = _jsonrpc_;
        $httpBackend = _$httpBackend_;
    }));

    it('should have created $httpBackend', function() {
        expect($httpBackend.get).toBeDefined();
    });

});

“jsonrpc”服务提供者定义如下:

angular.module('jsonrpc', ['uuid']).provider('jsonrpc', function() {
    'use strict';

    var defaults = this.defaults = {};
    defaults.basePath = '/rpc';

    this.$get = ['$http', 'uuid4', function($http, uuid4) {
        function jsonrpc(options, config) {

        ... (etc) ...

当我尝试模拟 'jsonrpc' 模块对 'uuid' 模块的依赖时,我收到以下错误:

$injector:modulerr http://errors.angularjs.org/1.2.16/$injector/modulerr?p0=jsonrpc&p1=%5B%24injector%3Amodulerr%5D%20http%3A%2F%2Ferrors.angularjs.org%2F1.2.16%2F%24injector%2Fmodulerr%3Fp0%3Duuid%26p1%3D%255B%2524injector%253Anomod

在模拟该依赖项时我做错了什么?

【问题讨论】:

    标签: javascript angularjs unit-testing karma-jasmine


    【解决方案1】:

    您所做的不正确,因为您正在修改 jsrpc 模块的提供者,而不是 uuid 模块,并且您只是调用 $provide.value 来提供应该是整个模块的内容(而不是值)

    如果 uuid4 是唯一需要模拟的 uuid 部分,则可以这样做

    module('jsrpc', function($provide) {
        $provide.service('uuid4', uuid4Mock)
    });
    

    uuid4Mock 仅提供该服务的行为,或其中的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-10
      • 2021-10-18
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多