2 回答

TA貢獻(xiàn)1869條經(jīng)驗(yàn) 獲得超4個(gè)贊
如果不等待,就不可能從awaitFirstStreamForPage(page)with 中捕捉到拒絕。try..catch
拒絕應(yīng)該被捕獲但是在調(diào)用之后advanceTimersByTime并且可能在 之后flushPromises。
有可能:
const promise = awaitFirstStreamForPage(page);
promise.catch(() => { /* suppress UnhandledPromiseRejectionWarning */ });
jest.advanceTimersByTime(10000)
await flushPromises();
await expect(promise).rejects.toThrow('no stream found for 10000ms');

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
問題似乎不是假計(jì)時(shí)器的使用:您預(yù)期的錯(cuò)誤是被拋出的錯(cuò)誤。但是,在 Jest 中測(cè)試拋出錯(cuò)誤的函數(shù)時(shí),您應(yīng)該將拋出錯(cuò)誤的代碼包裝在一個(gè)函數(shù)中,如下所示:
expect(()=> {/* code that will throw error */}).toThrow()
更多細(xì)節(jié)在這里: https: //jestjs.io/docs/en/expect#tothrowerror
編輯:對(duì)于異步函數(shù),你應(yīng)該使用rejects
before toThrow
;看這個(gè)例子:Can you write async tests that expect toThrow?
添加回答
舉報(bào)