gpt4 book ai didi

angularjs - 注入(inject)模拟 angular.service 依赖项

转载 作者:行者123 更新时间:2023-12-04 01:39:54 26 4
gpt4 key购买 nike

我有一个服务“Inputs”,在模块“Puts”中定义,它依赖于第二个服务“InputCreator”。我需要 stub InputCreator 服务以测试 Inputs 服务。

据我了解answer here ,我应该创建一个包含我的 stub 服务的模块,然后创建一个新的“测试”模块,指定被测模块,然后将 stub 模块指定为依赖项。然后从注入(inject)器中拉取服务。像这样:

beforeEach(function() {

angular.module.('Puts'); // contains the service 'Inputs'

angular.module('Mocks',[])
.service('InputCreator',function(){
var mockInputs = {
//stubbed behaviour goes here
};
return mockInputs;
});
});

angular.module('Test',['Puts', 'Mocks'];

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

但是,注入(inject)器函数以“未知的 InputsProvider <- Inputs”响应。

我误入歧途到哪里去了?

谢谢!

最佳答案

想通了这一点,我想我会回答我自己的问题。上面的大错误是使用 angular.module 而不是 angular.mock.module,这很方便 angular-mock 将其称为模块。他们根本不是一回事!

此外,使用 angular.mock.module 初始化模拟服务就足够了,只要您在初始化被测模块之前执行此操作即可。正如上面链接的问题中所建议的那样,不需要这种“将模块包装在第三个模块中”的业务。以机智:

describe("Test Service", function() {
var TestService, getvaluestub;

beforeEach(function() {

// create mock service
var mock = {getvalue:function(){}}

angular.module('dependencymodule',[])
.service('dependencyservice',function () {
return mock;
});

//mock the function we are stubbing, (that, in this case, returns value 4)
getvaluestub = sinon.stub(mock,'getvalue')returns(4);

//instantiate your mock service
module('dependencymodule');

//instantiate the module of the service under test,
//that depends on 'dependencyservice' mocked above
//(ie - testmodule includes the service 'testservice')
module('testmodule');

//inject your test service for testing
inject(function ($injector) {
TestService = $injector.get('testservice');
})

//tests go here.....

如果依赖模块已经存在,您仍然可以执行上述所有操作,或者您可以从 $injector 获取服务,插入您的 spy 和 stub ,然后>实例化被测服务。在实例化依赖服务之前设置 spy / stub 非常重要,否则将在没有它们的情况下实例化。它看起来像这样:
describe("Test Service", function() {
var TestService, DependencyService, getvaluestub;

beforeEach(function() {

// these modules are specified in the application
module('dependencymodule');
module('testmodule');

inject(function ($injector) {
DependencyService = $injector.get('testservice');

getvaluestub = sinon.stub(DependencyService,'getvalue').returns(4);

OtherService = $injector.get('otherservice');
})
});

// test go here

所以,你去吧。希望这对搜索“将模拟注入(inject) angular.service ”的人有用。

关于angularjs - 注入(inject)模拟 angular.service 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730522/

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