我试图使用sinon来模拟我的函数使用的服务,但是我无法找到将模拟注入到函数中的方法。
使用require获取服务
我的职能如下:
// something.js
const service = require('./service');
module.exports = {
// do something using a service
doSomething: function (options) {
let results = [];
return service.foo(option.param)
// and return the value adding some logic
.then(function(resultFromService){
// want to test this flag
if ( options.someFlag ) {
results = resultFromService;
}
})
.then(function(){
/// more existing code here
return results;
});
}
}我试图像这样嘲弄service.foo:
const something = require('../../something.js');
const sinon = require('sinon');
...
it('should doSomething by calling foo in the service', function(done) {
///I'm getting this error here: Error: Trying to stub property 'foo' of undefined
sinon.stub( something.service , 'foo' )
.returns(when(function() {
return ['bar', 'baz'];
}));
let promise = something.doSomething({param:'for service', someFlag:true});
});然后检查我的doSomething方法是否确实在执行它应该执行的逻辑。
问:如何为该服务注入一个模拟服务和/或一个模拟函数,该服务在我的something函数中定义为一个私有闭包作用域变量。
发布于 2017-05-17 23:19:05
我最终使用了mock-require
const mockRequire = require('mock-require');
it('do something', function(){
mockRequire('./service', {
foo: function(p){
return [];
}
});
let something = require('./something.js);
// Now when it requires the service, it gets the mock instead
something.doSomething({flag:true, param:'a'});
assert. etc. etc
}));https://stackoverflow.com/questions/44034716
复制相似问题