我有一个服务,'输入',在模块'Puts'中定义,取决于第二个服务'InputCreator'.我需要存根InputCreator服务以测试Inputs服务.
我理解这里的答案,我应该创建一个包含我的存根服务的模块,然后创建一个新的'Test'模块,指定被测模块,然后将存根模块作为依赖项.然后从喷油器拉出服务.像这样:
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');
});
});
Run Code Online (Sandbox Code Playgroud)
但是,注入器功能以'unknown InputsProvider < - Inputs'响应.
我哪里误入歧途?
谢谢!
Jon*_*Biz 22
想出这个,我以为我会回答我自己的问题.上面的大错误是使用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.....
Run Code Online (Sandbox Code Playgroud)
如果依赖模块已经存在,您可以仍然执行上述所有操作,或者您可以从$ injector获取服务,插入您的间谍和存根,然后>然后<实例化正在测试的服务.在<依赖服务实例化之前>设置间谍/存根是很重要的,否则它将在没有它们的情况下被实例化.它看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
所以,你去吧.希望这对于搜索"将模拟注入角度服务"的人有用.
归档时间: |
|
查看次数: |
11519 次 |
最近记录: |