|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- # Disallow setup and teardown hooks (`no-hooks`)
-
- Jest provides global functions for setup and teardown tasks, which are called
- before/after each test case and each test suite. The use of these hooks promotes
- shared state between tests.
-
- ## Rule Details
-
- This rule reports for the following function calls:
-
- - `beforeAll`
- - `beforeEach`
- - `afterAll`
- - `afterEach`
-
- Examples of **incorrect** code for this rule:
-
- ```js
- /* eslint jest/no-hooks: "error" */
-
- function setupFoo(options) {
- /* ... */
- }
-
- function setupBar(options) {
- /* ... */
- }
-
- describe('foo', () => {
- let foo;
-
- beforeEach(() => {
- foo = setupFoo();
- });
-
- afterEach(() => {
- foo = null;
- });
-
- it('does something', () => {
- expect(foo.doesSomething()).toBe(true);
- });
-
- describe('with bar', () => {
- let bar;
-
- beforeEach(() => {
- bar = setupBar();
- });
-
- afterEach(() => {
- bar = null;
- });
-
- it('does something with bar', () => {
- expect(foo.doesSomething(bar)).toBe(true);
- });
- });
- });
- ```
-
- Examples of **correct** code for this rule:
-
- ```js
- /* eslint jest/no-hooks: "error" */
-
- function setupFoo(options) {
- /* ... */
- }
-
- function setupBar(options) {
- /* ... */
- }
-
- describe('foo', () => {
- it('does something', () => {
- const foo = setupFoo();
- expect(foo.doesSomething()).toBe(true);
- });
-
- it('does something with bar', () => {
- const foo = setupFoo();
- const bar = setupBar();
- expect(foo.doesSomething(bar)).toBe(true);
- });
- });
- ```
-
- ## Options
-
- ```json
- {
- "jest/no-hooks": [
- "error",
- {
- "allow": ["afterEach", "afterAll"]
- }
- ]
- }
- ```
-
- ### `allow`
-
- This array option controls which Jest hooks are checked by this rule. There are
- four possible values:
-
- - `"beforeAll"`
- - `"beforeEach"`
- - `"afterAll"`
- - `"afterEach"`
-
- By default, none of these options are enabled (the equivalent of
- `{ "allow": [] }`).
-
- Examples of **incorrect** code for the `{ "allow": ["afterEach"] }` option:
-
- ```js
- /* eslint jest/no-hooks: ["error", { "allow": ["afterEach"] }] */
-
- function setupFoo(options) {
- /* ... */
- }
-
- let foo;
-
- beforeEach(() => {
- foo = setupFoo();
- });
-
- afterEach(() => {
- jest.resetModules();
- });
-
- test('foo does this', () => {
- // ...
- });
-
- test('foo does that', () => {
- // ...
- });
- ```
-
- Examples of **correct** code for the `{ "allow": ["afterEach"] }` option:
-
- ```js
- /* eslint jest/no-hooks: ["error", { "allow": ["afterEach"] }] */
-
- function setupFoo(options) {
- /* ... */
- }
-
- afterEach(() => {
- jest.resetModules();
- });
-
- test('foo does this', () => {
- const foo = setupFoo();
- // ...
- });
-
- test('foo does that', () => {
- const foo = setupFoo();
- // ...
- });
- ```
-
- ## When Not To Use It
-
- If you prefer using the setup and teardown hooks provided by Jest, you can
- safely disable this rule.
-
- ## Further Reading
-
- - [Jest docs - Setup and Teardown](https://facebook.github.io/jest/docs/en/setup-teardown.html)
|