You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
2.8 KiB
174 lines
2.8 KiB
# 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)
|
|
|