我有以下文件进行测试
a.ts
export function a1(param1){
a2(param1);
return result;
}
function a2(param){
return result2;
}
我正在尝试使用重新连接为导出的方法a1编写单元测试用例。以下是我的测试类
a_test.ts
const rewiredA= rewire('a');
rewiredA.__set__('a2', (token) => 'testmessage');
// Testing exported method of a.ts
rewiredA.__get__('a1')('param');
这里不是调用返回' testmessage'的存根私有方法,而是调用实际的私有方法。我的理解是当我们调用导出的函数时,模拟的私有方法将被执行。
请指导我。
答案 0 :(得分:0)
我的理解是当我们调用导出的函数时,模拟的私有方法将被执行。
不正确的。如果某个功能未导出,则无法重新连接。
导出您要重新连接的功能。您可以将其命名为_a2
,以表示它是内部的。
答案 1 :(得分:0)
它应该适用于"rewire": "^4.0.1"
。例如
a.js
:
function a1(param1) {
return a2(param1);
}
function a2(param) {
return 'result2';
}
a.test.js
:
const rewire = require('rewire');
const mod = rewire('./a');
const { expect } = require('chai');
describe('49504977', () => {
it('a1', (done) => {
mod.__with__(
'a2',
(token) => 'testmessage',
)(() => {
const actual = mod.__get__('a1')('param');
expect(actual).to.be.eq('testmessage');
done();
});
});
it('a2', () => {
const actual = mod.__get__('a2')();
expect(actual).to.be.eq('result2');
});
});
单元测试结果覆盖率100%:
49504977
✓ a1
✓ a2
2 passing (9ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
a.js | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
源代码:https://github.com/mrdulin/expressjs-research/tree/master/src/stackoverflow/49504977