Как запустить функцию, когда какой-либо тест не удается - Jest

Я хочу запускать function/task всякий раз, когда любой jest тест не проходит. Вместо того, чтобы обернуть весь мой тест с помощью try/catch или добавить проверку if, есть ли способ использовать afterEach?

Если тест не пройден, я хочу, чтобы он не прошел, просто запустите отдельную функцию.

Например:

test('nav loads correctly', async () => {
    const listItems = await page.$$('[data-testid="navBarLi"]')

    expect(listItems.length).toBe(4)

    if (listItems.length !== 4)
      await page.screenshot({path: 'screenshot.png'})

  })

Это добавление проверки if... Но я хочу что-то более надежное для всех моих тестов.

Ответы

Ответ 1

Почему бы не использовать try/catch?

Если вам не нравится, как это выглядит, вы можете скрыть уродство в функции:

function runAssertion(assertion, onFailure) {
    try {
        assertion();
    } catch (exception) {
        onFailure();
        throw exception;
    }
}

Тогда назови это так:

test('nav loads correctly', async () => {
    const listItems = await page.$$('[data-testid="navBarLi"]')

    runAssertion(
        () => { expect(listItems.length).toBe(4) },
        () => { await page.screenshot({path: 'screenshot.png'}) }
    )
})

Это подход нашей команды, чтобы избежать повселокального использования try/catch.