How to use sinon mock function

Point1

今天在写测试的时候干了一件非常蠢的事情,记录一下,提醒自己:sinon.stub可以mock测试类中的方法,但是如果A方法被同一个类中的B方法调用,当B执行的时候,调用的还是原来的A方法

1
2
3
4
5
6
7
8
//testForSinon1.js
function test1 () {
console.log('test1');
}

module.exports = {
test1
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//testForSinon2.js
const test1 = require('./testForSinon1');
function test2Inner() {
console.log('_test2Inner');
}

function test2 () {
test1.test1();
test2Inner();
console.log('test2');
}

module.exports = {
test2,
test2Inner
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//sinon.js
const sinon = require('sinon');
const test1 = require('./lib/testForSinon1');
const test2 = require('./lib/testForSinon2');

sinon.stub(test1, 'test1').callsFake(() => {
console.log('test1-stub');
})

sinon.stub(test2, 'test2Inner').callsFake(() => {
console.log('test2Inner-stub');
})


test2.test2Inner();
//test2Inner-stub

test2.test2();
//test1-stub
//_test2Inner
//test2

Point2

如果你在A中通过如下方法引入一个方法

1
2
// A.js
const { b } = require('./B.js');

然后在测试中

1
2
3
4
5
6
7
import B from './B.js';

...
...
...

sinon.stub(B, 'b');

这样其实是没有用的,调用的还是b方法的本身