Skip to content

Latest commit

 

History

History
140 lines (102 loc) · 2.38 KB

prefer-hooks-in-order.md

File metadata and controls

140 lines (102 loc) · 2.38 KB

Prefer having hooks in a consistent order (prefer-hooks-in-order)

💼 This rule is enabled in the following configs: all.

While hooks can be setup in any order, they're always called by jest in this specific order:

  1. beforeAll
  2. beforeEach
  3. afterEach
  4. 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

/* 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

/* 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

Further Reading