2
我想測試一個遞歸函數,它重試輸入函數直到它成功(返回true)。如何對自己調用的函數進行單元測試
- 調用一個承諾,並等待其完成
- 如果返回值是正的,停止。否則,在減少重試計數的同時重試。
下面是實現:
type booleanPromiseFunc = (...args) => Promise<boolean>;
export async function retryIfFails(func: booleanPromiseFunc, retryCount: number)
{
let result = await func();
if (result)
return;
if (retryCount == 0)
return;
setTimeout(retryIfFails, 1000, func, retryCount - 1);
}
使用單元測試興農假定時器:
it.only('Test', function() {
let func = sinon.stub();
func.returns(Promise.resolve(false));
Utils.retryIfFails(func, 2);
chai.expect(func.callCount).eq(1);
clock.tick(1001);
chai.expect(func.callCount).eq(2);
clock.tick(1001);
chai.expect(func.callCount).eq(3);
})
單元測試輸出:
AssertionError: expected 1 to equal 2
+ expected - actual
-1
+2
基本上,函數從不自稱。 Sinon假定時器部分http://sinonjs.org/docs/#clock中的代碼正常工作。這個功能有什麼不同?
您的retryIfFail需要承諾作爲參數。你在超時時將它留空... –