Testing Library findBy* queries only working with async/await

From the documentation, findBy queries return a Promise, and throwing an error in a Promise results in a rejection. But it seems like using these queries with Promise.prototype.catch() doesn’t work in cases where using them with async/await + try…catch does.

For example, ‘not found’ gets logged here as expected:

const { screen } = require('@testing-library/dom');

beforeAll(() => {
  document.body.innerHTML = `
    <header></header>
  `;
});

test('DOM', async () => {
  try {
    await screen.findByRole('aaaaa');
    console.log('found');
  } catch {
    console.log('not found');
  }
});

However, nothing gets logged here:

test('DOM', () => {
  screen.findByRole('aaaaa')
    .then(() => {
      console.log('found');
    })
    .catch(() => {
      console.log('not found');
    });
});

Is there a reason for this?

108 thoughts on “Testing Library findBy* queries only working with async/await”

Leave a Comment