This rule prevents the use of expect
inside catch
blocks.
Expectations inside a catch
block can be silently skipped. While Jest provides
an expect.assertions(number)
helper, Shopify rarely uses this feature. 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/);
}
});
The following patterns are not warnings:
it('foo', () => {
expect(() => foo()).toThrow(/foo error/);
});
it('bar', async () => {
await expect(fooPromise).rejects.toThrow(/foo error/);
});