no-try-expect.md 1.34 KB

Prevent catch assertions in tests (no-try-expect)

Deprecated

This rule has been deprecated in favor of no-conditional-expect.


This rule prevents the use of expect inside catch blocks.

Rule Details

Expectations inside a catch block can be silently skipped. While Jest provides an expect.assertions(number) helper, it might be cumbersome to add this to every single test. Using toThrow concisely guarantees that an exception was thrown, and that its contents match expectations.

The following patterns are warnings:

it('foo', () => {
  try {
    foo(); // `foo` may be refactored to not throw exceptions, yet still appears to be tested here.
  } catch (err) {
    expect(err).toMatch(/foo error/);
  }
});

it('bar', async () => {
  try {
    await foo();
  } catch (err) {
    expect(err).toMatch(/foo error/);
  }
});

it('baz', async () => {
  try {
    await foo();
  } catch (err) {
    expect(err).toMatchObject({ code: 'MODULE_NOT_FOUND' });
  }
});

The following patterns are not warnings:

it('foo', () => {
  expect(() => foo()).toThrow(/foo error/);
});

it('bar', async () => {
  await expect(fooPromise).rejects.toThrow(/foo error/);
});

it('baz', async () => {
  await expect(() => foo()).rejects.toThrow(
    expect.objectContaining({ code: 'MODULE_NOT_FOUND' }),
  );
});