誰かがJestでの手動モックを手伝ってくれませんか? :)私はJestに実際のモジュールの代わりにモックを使わせようとしています。
私のテスト:
// __tests__/mockTest.js
import ModuleA from "../src/ModuleA"
describe("ModuleA", () => {
beforeEach(() => {
jest.mock("../src/ModuleA")
})
it("should return the mock name", () => {
const name = ModuleA.getModuleName()
expect(name).toBe("mockModuleA")
})
})
私のコード:
// src/ModuleA.js
export default {
getModuleName: () => "moduleA"
}
// src/__mocks__/ModuleA.js
export default {
getModuleName: () => "mockModuleA"
}
documentation が手動モックについて述べているすべてに従ったと思いますが、おそらくここで何かを見落としていますか?これは私の結果です:
Expected value to be:
"mockModuleA"
Received:
"moduleA"
モジュールのモックは、可能な場合はbabel-jest
変換で持ち上げられるため、モジュールのモックが作成されます。
import ModuleA from "../src/ModuleA"
jest.mock("../src/ModuleA") // hoisted to be evaluated prior to import
jest.mock
はbeforeEach
関数に存在するため、モジュールをテストごとにモックする必要がある場合、これは機能しません。
この場合、require
を使用する必要があります。
describe("ModuleA", () => {
beforeEach(() => {
jest.mock("../src/ModuleA")
})
it("should return the mock name", () => {
const ModuleA = require("../src/ModuleA").default;
const name = ModuleA.getModuleName()
expect(name).toBe("mockModuleA")
})
})
これはエクスポートではなく、モックする必要があるデフォルトのエクスポートのメソッドであるため、モジュール全体ではなくModuleA.getModuleName
をモックすることによっても実現できます。