问题描述
我的代码如下:
const inner = function inner(){
return Math.random()
}
const outer = function outer(){
if (inner()>0.5)
return true
return false
}
module.exports = {
outer,}
要测试外部方法,我需要将内部方法存根。 到目前为止我尝试过的:
const sinon = require('sinon')
const filetoBeTested = require('./my-tiny-example')
sinon.stub(filetoBeTested,'inner')
.returns(0.9)
console.log(filetoBeTested.outer())
我得到的错误:
TypeError: Cannot stub non-existent property inner
考虑到我正在使用sinon进行存根,任何建议。
谢谢
解决方法
您可以使用rewire软件包对inner
函数进行存根,而无需将其导出。
例如
my-tiny-example.js
:
const inner = function inner() {
return Math.random();
};
const outer = function outer() {
if (inner() > 0.5) return true;
return false;
};
module.exports = {
outer,};
my-tiny-example.test.js
:
const rewire = require('rewire');
const sinon = require('sinon');
describe('64741353',() => {
it('should return true',(done) => {
const mod = rewire('./my-tiny-example');
const innerStub = sinon.stub().returns(1);
mod.__with__({
inner: innerStub,})(() => {
const actual = mod.outer();
sinon.assert.match(actual,true);
done();
});
});
it('should return true',(done) => {
const mod = rewire('./my-tiny-example');
const innerStub = sinon.stub().returns(0);
mod.__with__({
inner: innerStub,false);
done();
});
});
});
单元测试结果:
64741353
✓ should return true (68ms)
✓ should return true
2 passing (123ms)
--------------------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
--------------------|---------|----------|---------|---------|-------------------
All files | 85.71 | 100 | 50 | 83.33 |
my-tiny-example.js | 85.71 | 100 | 50 | 83.33 | 2
--------------------|---------|----------|---------|---------|-------------------