In Vitest, Order Of Import Matters For Mocks
Cutting to the chase
In Vitest, this would work:
import {test, expect, vi} from "vitest"; import round from "lodash.round";
vi.mock("lodash.round", () => { return { default: (value) => 33 } })
test("roundup", () => { const no = 5.7; expect(round(no)).toBe(33); });
however if the mock is extracted to another file (say, to be reused across several tests), test will fail if it's imported after actual package it mocks:
import {test, expect, vi} from "vitest"; import round from "lodash.round"; import _ from "./roundmock";
test("roundup", () => { const no = 5.7; expect(round(no)).toBe(33); });
because the mock is imported after the actual package. This, however, will pass (note that the only difference is the order of imports):
import {test, expect, vi} from "vitest"; import _ from "./roundmock"; import round from "lodash.round";
test("roundup", () => { const no = 5.7; expect(round(no)).toBe(33); });
I guess that's because Vitest is hoisting mocks withing the file to happen before the imports, but if they're in separate files - the import will happen in actual import order.