Skip to content

Latest commit

 

History

History
175 lines (128 loc) · 2.85 KB

File metadata and controls

175 lines (128 loc) · 2.85 KB

vitest/no-hooks

📝 Disallow setup and teardown hooks.

⚠️ This rule warns in the 🌐 all config.

Rule details

This rule reports for the following function calls:

  • beforeAll
  • beforeEach
  • afterAll
  • afterEach

Examples of incorrect code for this rule:

/* eslint vitest/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:

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

Name Description Type
allow This array option controls which Vitest hooks are checked by this rule. String[]
{
  "vitest/no-hooks": [
    "error",
    {
      "allow": ["afterEach", "afterAll"]
    }
  ]
}

allow

This array option controls which Vitest 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:

/* eslint vitest/no-hooks: ["error", { "allow": ["afterEach"] }] */

function setupFoo(options) {
  /* ... */
}

let foo

beforeEach(() => {
  foo = setupFoo()
})

afterEach(() => {
  vi.resetModules()
})

test('foo does this', () => {
  // ...
})

test('foo does that', () => {
  // ...
})

Examples of correct code for the { "allow": ["afterEach"] } option:

/* eslint vitest/no-hooks: ["error", { "allow": ["afterEach"] }] */

function setupFoo(options) {
  /* ... */
}

afterEach(() => {
  vi.resetModules()
})

test('foo does this', () => {
  const foo = setupFoo()
  // ...
})

test('foo does that', () => {
  const foo = setupFoo()
  // ...
})