使用 sinon 存根私有函数
stub a private function using sinon
我想存根一个没有被给定文件公开的函数。
我的代码如下:
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,
})(() => {
const actual = mod.outer();
sinon.assert.match(actual, 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
--------------------|---------|----------|---------|---------|-------------------
我想存根一个没有被给定文件公开的函数。
我的代码如下:
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,
})(() => {
const actual = mod.outer();
sinon.assert.match(actual, 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
--------------------|---------|----------|---------|---------|-------------------