[英]Test promise-chain with Jest
我正試圖用Jest測試promises-chain序列:
someChainPromisesMethod: function() {
async()
.then(async1)
.then(async2)
.then(result)
.catch(error);
}
雖然測試單一承諾是好的記錄,但不確定什么是正確的方法(不知道該怎么做TBO)來測試這種鏈。 讓我們假設所有的asyncs都是嘲笑的,只是在他們的身體里解決了Promises(Promise.resolve)。
所以我需要能測試整個序列的東西。
您可以使用jest.fn()來模擬實現並檢查調用函數的內容並返回您想要的內容。 您需要模擬函數中的所有async
函數並返回所需的函數。
例如
async = jest.fn(() => {
return Promise.resolve('value');
});
async1 = jest.fn(() => {
return Promise.resolve('value1');
});
async2 = jest.fn(() => {
return Promise.resolve('Final Value');
});
您可以在測試中使用它
it('should your test scenario', (done) => {
someChainPromisesMethod()
.then(data => {
expect(async1).toBeCalledWith('value');
expect(async2).toBeCalledWith('value1');
expect(data).toEqual('Final Value');
done();
});
});
但是,如果你有邏輯,我會把你的鏈變平並分別測試它們,這樣你就可以輕松地測試所有可能性。
使用完成不能解決問題,它會給你一個誤報測試。 如果出於任何原因期望失敗,您的測試將會超時並且您將無法獲得實際結果。
正確的解決方案是返回您的Promise,因此Jest將能夠正確評估期望結果。
在@grgmo示例之后,更好的方法可能是:
it('should your test scenario', () => {
return someChainPromisesMethod()
.then(data => {
expect(async1).toBeCalledWith('value');
expect(async2).toBeCalledWith('value1');
expect(data).toEqual('Final Value');
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.