第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

笑話:測(cè)試超時(shí)后拒絕的承諾

笑話:測(cè)試超時(shí)后拒絕的承諾

白衣染霜花 2023-03-24 17:09:55
我正在嘗試為這個(gè)函數(shù)的悲慘路徑編寫一個(gè)測(cè)試:const awaitFirstStreamForPage = async page => {  try {    await page.waitForSelector('[data-stream="true"]', {      timeout: MAX_DELAY_UNTIL_FIRST_STREAM,    })  } catch (e) {    throw new Error(`no stream found for ${MAX_DELAY_UNTIL_FIRST_STREAM}ms`)  }}我設(shè)法編寫了一個(gè)通過(guò)的測(cè)試,但它需要 10 秒才能運(yùn)行,因?yàn)樗鼘?shí)際上是在等待測(cè)試完成。describe('awaitFirstStreamForPage()', () => {  it('given a page and no active stream appearing: should throw', async () => {    jest.setTimeout(15000)    const browser = await puppeteer.launch({ headless: true })    const page = await getPage(browser)    let error    try {      await awaitFirstStreamForPage(page)    } catch (err) {      error = err    }    const actual = error.message    const expected = 'no stream found for 10000ms'    expect(actual).toEqual(expected)    await browser.close()    jest.setTimeout(5000)  })})可能有一種方法可以使用 Jest 的假計(jì)時(shí)器來(lái)解決它,但我無(wú)法讓它工作。這是我最好的嘗試:const flushPromises = () => new Promise(res => process.nextTick(res))describe('awaitFirstStreamForPage()', () => {  it('given a page and no active stream appearing: should throw', async () => {    jest.useFakeTimers()    const browser = await puppeteer.launch({ headless: true })    const page = await getPage(browser)    let error    try {      awaitFirstStreamForPage(page)      jest.advanceTimersByTime(10000)      await flushPromises()    } catch (err) {      error = err    }    const actual = error.message    const expected = 'no stream found for 10000ms'    expect(actual).toEqual(expected)    await browser.close()    jest.useRealTimers()  })})失敗并拋出(node:9697) UnhandledPromiseRejectionWarning: Error: no stream found for 10000ms即使我將失敗的函數(shù)包裝在一個(gè)try/catch. 你如何使用假計(jì)時(shí)器測(cè)試這樣的功能?
查看完整描述

2 回答

?
MMTTMM

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');


查看完整回答
反對(duì) 回復(fù) 2023-03-24
?
慕森王

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)該使用rejectsbefore toThrow;看這個(gè)例子:Can you write async tests that expect toThrow?


查看完整回答
反對(duì) 回復(fù) 2023-03-24
  • 2 回答
  • 0 關(guān)注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)