Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
57 lines (45 sloc) 1.22 KB

Prevent catch assertions in tests (no-try-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' }),
  );
});
You can’t perform that action at this time.