Skip to content

Latest commit

 

History

History
56 lines (45 loc) · 1.21 KB

no-try-expect.md

File metadata and controls

56 lines (45 loc) · 1.21 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 () => {
  expect(() => foo()).toThrow(
    expect.objectContaining({ code: 'MODULE_NOT_FOUND' }),
  );
});