![](/img/trans.png)
[英]Unknown Provider: $scopeProvider When Testing Angular Controller With Jasmine
[英]Mocking custom provider injected into provider when unit testing Angular in Jasmine
我正在 Jasmine 中对依赖于另一个提供者的提供者进行单元测试。 没有与此提供程序关联的配置。 当嘲笑提供者时,我读过你应该使用类似的东西
beforeEach(module(function ($provide) {
mockInjectedProvider = { };
$provide.value('injected', mockInjectedProvider );
}));
在将自定义提供程序注入服务时,这对我来说很好用。 将它们注入提供程序时,它不起作用。 代码不会失败,但测试时执行的是实际提供者,而不是模拟的提供者。 下面抽象的例子。
var mockInjectedProvider;
beforeEach(function () {
module('myModule');
});
beforeEach(module(function ($provide) {
mockInjectedProvider = {
myFunc: function() {
return "testvalue"
}
}
};
$provide.value('injected', mockInjectedProvider );
}));
beforeEach(inject(function (_base_) {
baseProvider = _base_;
}));
it("injectedProvider should be mocked", function () {
var resultFromMockedProvider = baseProvider.executeMyFuncFromInjected();
expect(resultFromMockedProvider).toEqual("testvalue");
}); // Here instead of using my mock it executes the actual dependency
在$provide.value
声明我已经试过既包括injected
和injectedProvider
,以及使用$provide.provider
和嘲讽一个$get
函数就可以了,但似乎没有任何工作。 我只是无法让它嘲笑实际的提供者。 抽象的基础提供者看起来像这样。
(function (ng, module) {
module.provider("base",
["injectedProvider", function (injectedProvider) {
this.executeMyFuncFromInjected= function() {
return injectedProvider.myFunc(); // let's say this returns "realvalue"
}
this.$get = function () {
return this;
};
}]
);
})(window.angular, window.angular.module("myModule"));
除了 Jasmine 模拟之外,我的代码中的所有内容都可以正常工作。
在这种情况下,最好只模拟返回值而不是提供者。
var mockInjectedProvider;
beforeEach(function () {
module('myModule');
});
beforeEach(inject(function (_injected_) {
spyOn(_injected_, "myFunc").and.returnValue("testvalue");
}));
beforeEach(inject(function (_base_) {
baseProvider = _base_;
}));
it("injectedProvider should be mocked", function () {
var resultFromMockedProvider = baseProvider.executeMyFuncFromInjected();
expect(resultFromMockedProvider).toEqual("testvalue");
}); // Here instead of using my mock it executes the actual dependency
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.