-
Notifications
You must be signed in to change notification settings - Fork 238
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: create
prefer-hooks-in-order
rule (#1098)
* feat: create `prefer-hooks-in-order` rule * wip * Implement prefer-hooks-in-order logic * Fix all rules tests * ci: run prettier and docs generation, fix test description * test: Add examples to the tests * test: Add some more complicated tests * ci: change isHook to isHookCall * feat: use early returns consistently Co-authored-by: Gareth Jones <[email protected]>
- Loading branch information
Showing
6 changed files
with
904 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
# Prefer having hooks in a consistent order (`prefer-hooks-in-order`) | ||
|
||
While hooks can be setup in any order, they're always called by `jest` in this | ||
specific order: | ||
|
||
1. `beforeAll` | ||
1. `beforeEach` | ||
1. `afterEach` | ||
1. `afterAll` | ||
|
||
This rule aims to make that more obvious by enforcing grouped hooks be setup in | ||
that order within tests. | ||
|
||
## Rule Details | ||
|
||
Examples of **incorrect** code for this rule | ||
|
||
```js | ||
/* eslint jest/prefer-hooks-in-order: "error" */ | ||
|
||
describe('foo', () => { | ||
beforeEach(() => { | ||
seedMyDatabase(); | ||
}); | ||
|
||
beforeAll(() => { | ||
createMyDatabase(); | ||
}); | ||
|
||
it('accepts this input', () => { | ||
// ... | ||
}); | ||
|
||
it('returns that value', () => { | ||
// ... | ||
}); | ||
|
||
describe('when the database has specific values', () => { | ||
const specificValue = '...'; | ||
|
||
beforeEach(() => { | ||
seedMyDatabase(specificValue); | ||
}); | ||
|
||
it('accepts that input', () => { | ||
// ... | ||
}); | ||
|
||
it('throws an error', () => { | ||
// ... | ||
}); | ||
|
||
afterEach(() => { | ||
clearLogger(); | ||
}); | ||
beforeEach(() => { | ||
mockLogger(); | ||
}); | ||
|
||
it('logs a message', () => { | ||
// ... | ||
}); | ||
}); | ||
|
||
afterAll(() => { | ||
removeMyDatabase(); | ||
}); | ||
}); | ||
``` | ||
|
||
Examples of **correct** code for this rule | ||
|
||
```js | ||
/* eslint jest/prefer-hooks-in-order: "error" */ | ||
|
||
describe('foo', () => { | ||
beforeAll(() => { | ||
createMyDatabase(); | ||
}); | ||
|
||
beforeEach(() => { | ||
seedMyDatabase(); | ||
}); | ||
|
||
it('accepts this input', () => { | ||
// ... | ||
}); | ||
|
||
it('returns that value', () => { | ||
// ... | ||
}); | ||
|
||
describe('when the database has specific values', () => { | ||
const specificValue = '...'; | ||
|
||
beforeEach(() => { | ||
seedMyDatabase(specificValue); | ||
}); | ||
|
||
it('accepts that input', () => { | ||
// ... | ||
}); | ||
|
||
it('throws an error', () => { | ||
// ... | ||
}); | ||
|
||
beforeEach(() => { | ||
mockLogger(); | ||
}); | ||
|
||
afterEach(() => { | ||
clearLogger(); | ||
}); | ||
|
||
it('logs a message', () => { | ||
// ... | ||
}); | ||
}); | ||
|
||
afterAll(() => { | ||
removeMyDatabase(); | ||
}); | ||
}); | ||
``` | ||
|
||
## Also See | ||
|
||
- [`prefer-hooks-on-top`](prefer-hooks-on-top.md) | ||
|
||
## Further Reading | ||
|
||
- [Order of execution of describe and test blocks](https://jestjs.io/docs/setup-teardown#order-of-execution-of-describe-and-test-blocks) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.