这是我的功能,在此功能中,“开始”功能中有两个promise功能。我应该如何测试“启动”功能。
export class TTT{
fun1(){
return new Promise(((resolve, reject) => {
console.log('function1');
resolve('function1');
}))
}
fun2(param){
return new Promise(((resolve, reject) => {
console.log('function2');
resolve(param);
}))
}
fun3(param){
console.log('function3');
return param;
}
async start(){
let param1 = await this.fun1();
let param2 = await this.fun2(param1);
this.fun3(param2);
}
}
下一个测试文件由我自己编写。我对fun1,fun2和fun3进行了存根,但似乎只有第一个函数有效。
describe('test',function () {
it('test ', function () {
let stub_fun1 =
sinon.stub(TTT.prototype,'fun1').callsFake((param)=>{
console.log('fun1');
return (Promise.resolve('fun1'));
});
let stub_fun2 =
sinon.stub(TTT.prototype,'fun2').callsFake((param)=>{
console.log('fun2');
return (Promise.resolve('fun2'));
});
let stub_fun3 =
sinon.stub(TTT.prototype,'fun3').callsFake((param)=>{
console.log('fun3');
return 'fun3';
});
let handler = new TTT();
let param = handler.start();
console.log(param);
stub_fun1.restore();
stub_fun2.restore();
stub_fun3.restore();
});
});
然后,结果是
测试
fun1
承诺{}
✓测试
function2
function3
答案 0 :(得分:0)
测试包含比赛条件。存根在被调用之前已还原。
start()
承诺应被链接:
it('test ', async function () {
...
let handler = new TTT();
let param = await handler.start();
...
});
当前设置需要手动调用restore()
。如果测试失败,则无法恢复存根。 mocha-sinon
可用于省略restore()
,为每个测试设置一个沙箱并自动恢复存根。
答案 1 :(得分:0)
async start
是promise函数,因此在您的测试中,您需要通过指定await
来告诉mocha,以便该函数执行完成后它将运行console.log
。
describe('test', function () {
beforeEach(function() {
sinon.stub(TTT.prototype, 'fun1').callsFake((param)=>{
console.log('fun1');
return (Promise.resolve('fun1'));
});
sinon.stub(TTT.prototype, 'fun2').callsFake((param)=>{
console.log('fun2');
return (Promise.resolve('fun2'));
});
sinon.stub(TTT.prototype, 'fun3').callsFake((param)=>{
console.log('fun3');
return 'fun3';
});
})
afterEach(function() {
sinon.restore(); // use single restore
})
it('test ', async function () { // specify `async`
let handler = new TTT();
let param = await handler.start(); // specify `await`
console.log(param);
});
});
输出
test
fun1
fun2
fun3
undefined
✓ test
1 passing (13ms)