Skip to content
NewBun 1.4.5 is out. Release notes
AphrodyBun

Linter · Rules

jest/no-mocks-import

Disallow importing from a __mocks__ directory

Jest picks up the files in __mocks__ automatically when you call jest.mock(). Importing one by its path doesn't mock anything. The code under test still gets the real module, and your assertions look at a mock that nobody calls. Even with jest.mock(), the import by path is a second copy of the mock, not the one the code under test calls.

Import the real path and mock it. The test and the code under test then share the same mock.

Configure

Off by default. To turn it on:

bunfig.toml
[lint.rules]
"jest/no-mocks-import" = "error" # or "warn"

Examples

Reported:

import { expect, test } from "@jest/globals";
import { sendEmail } from "./__mocks__/mailer";
import { register } from "./register";

test("sends a welcome email", () => {
  register("ada@example.com");
  expect(sendEmail).toHaveBeenCalled();
});

require() is checked too:

const { sendEmail } = require("../__mocks__/mailer");

Not reported:

import { expect, jest, test } from "@jest/globals";
import { sendEmail } from "./mailer";
import { register } from "./register";

jest.mock("./mailer");

test("sends a welcome email", () => {
  register("ada@example.com");
  expect(sendEmail).toHaveBeenCalled();
});