# Suggest having hooks before any test cases (`prefer-hooks-on-top`)

All hooks should be defined before the start of the tests

## Rule Details

Examples of **incorrect** code for this rule

```js
/* eslint jest/prefer-hooks-on-top: "error" */

describe('foo', () => {
  beforeEach(() => {
    //some hook code
  });
  test('bar', () => {
    some_fn();
  });
  beforeAll(() => {
    //some hook code
  });
  test('bar', () => {
    some_fn();
  });
});

// Nested describe scenario
describe('foo', () => {
  beforeAll(() => {
    //some hook code
  });
  test('bar', () => {
    some_fn();
  });
  describe('inner_foo', () => {
    beforeEach(() => {
      //some hook code
    });
    test('inner bar', () => {
      some_fn();
    });
    test('inner bar', () => {
      some_fn();
    });
    beforeAll(() => {
      //some hook code
    });
    afterAll(() => {
      //some hook code
    });
    test('inner bar', () => {
      some_fn();
    });
  });
});
```

Examples of **correct** code for this rule

```js
/* eslint jest/prefer-hooks-on-top: "error" */

describe('foo', () => {
  beforeEach(() => {
    //some hook code
  });

  // Not affected by rule
  someSetup();

  afterEach(() => {
    //some hook code
  });
  test('bar', () => {
    some_fn();
  });
});

// Nested describe scenario
describe('foo', () => {
  beforeEach(() => {
    //some hook code
  });
  test('bar', () => {
    some_fn();
  });
  describe('inner_foo', () => {
    beforeEach(() => {
      //some hook code
    });
    test('inner bar', () => {
      some_fn();
    });
  });
});
```