|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # Prevent catch assertions in tests (`no-try-expect`)
-
- ## Deprecated
-
- This rule has been deprecated in favor of
- [`no-conditional-expect`](no-conditional-expect.md).
-
- ---
-
- 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:
-
- ```js
- 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:
-
- ```js
- 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' }),
- );
- });
- ```
|