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#
example.ts1 problem
import { expect, test } from "@jest/globals";
import { sendEmail } from "./__mocks__/mailer"Mocks should not be manually imported from a __mocks__ directory.;
import { register } from "./register";
test("sends a welcome email", () => {
register("ada@example.com");
expect(sendEmail).toHaveBeenCalled();
});require() is checked too:
example.js1 problem
const { sendEmail } = require("../__mocks__/mailer"Mocks should not be manually imported from a __mocks__ directory.);example.tsNo problems
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();
});