gpt4 book ai didi

angularjs - 如何模拟提供商

转载 作者:行者123 更新时间:2023-12-02 22:31:09 26 4
gpt4 key购买 nike

我的 Angular 1.3 应用程序正在使用 angular-translate library 。在我的 Karma 测试中,我尝试使用我创建的 Mock 对象来模拟 $translate 提供程序。

模拟对象称为MockTranslate,它属于myMocks模块。我没有在问题中包含 MockTranslate 的源代码,因为它与问题无关。

我的测试主题是一个 Controller ,我可以使用以下命令轻松模拟 $translate:

module('myMocks');
inject(function($controller, MockTranslate) {
$controller("MyController", {
$translate: MockTranslate.create(translations);
});
});

上面的模拟是有效的,但是我更喜欢使用 angular.mock.module 来模拟提供者,例如:

module('myMocks');
module("myModule", function($provide) {
$provide.provider("$translate", function(MockTranslate) {
return MockTranslate.create(translations);
});
});

但是当我运行测试时出现以下错误:

错误:[$injector:modulerr] 无法实例化模块函数 ($provide),原因是:错误:[$injector:unpr] 未知提供者:MockTranslate

如何使用 angular.mock.module 模拟提供者?

最佳答案

如果我正确理解了该任务,那么这里是一个有效的示例:

angular.module('translateApp', [])
.controller('translateCtrl', function ($scope, $translate) {
$scope.translate = function(message) {
return $translate.translate(message);
};
})
.provider({
$translate: function() {
this.$get = function () {
return {
translate: function (msg) {
return 'OriginalTranslate: ' + msg;
}
};
};
}
});

describe('Translate Controller Test', function() {
var mockScope;
var mockTranslate;

beforeEach(module('translateApp', function($provide) {
$provide.provider('MockTranslate', function() {
this.$get = function () {
return {
translate: function (msg) {
return 'MockTranslate: ' + msg;
}
};
}
});

$provide.provider('$translate', function() {
this.$get = function (MockTranslate) {
return {
translate: function (msg) {
return MockTranslate.translate(msg);
}
};
}
});
}));

beforeEach(inject(function($controller, $rootScope, $translate) {
mockScope = $rootScope.$new();
mockTranslate = $translate;

$controller('translateCtrl', {
$scope: mockScope,
$translate: mockTranslate
});
}));

it('Translates messages', function () {
expect(mockScope.translate('cool message')).toEqual('MockTranslate: cool message');
});
});

关于angularjs - 如何模拟提供商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28009242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com