---
title: "vitest/no-mocks-import"
description: "Disallow importing from a `__mocks__` directory"
# Generated by src/codegen/lint-rule-docs.ts. Do not edit below this line.
plugin: "vitest"
aliases: []
kind: "suggestion"
category: "style"
default: "off"
fixable: "no"
typeAware: false
deprecated: false
---

Vitest picks up the files in `__mocks__` on its own when you call `vi.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.

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

{/* Generated by src/codegen/lint-rule-docs.ts. Do not edit this section. */}

## Configure

Off by default. To turn it on:

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

{/* End of the generated section. */}

## Examples

Reported:

{/* bad */}
```ts
import { expect, test } from "vitest";
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:

{/* bad */}
```js
const { sendEmail } = require("../__mocks__/mailer");
```

Not reported:

{/* good */}
```ts
import { expect, test, vi } from "vitest";
import { sendEmail } from "./mailer";
import { register } from "./register";

vi.mock("./mailer");

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