手动模拟不适用于 Jest

有人可以帮助我在 Jest 中手动嘲笑吗?:) 我尝试让 Jest 使用模拟而不是实际的模块。

有人可以帮助我在 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"
32

模块模拟在可能的情况下使用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而不是整个模块来实现。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(161)
“WPM”如何在打字速度应用程序中计算
上一篇
表自动扩展更改公式范围(excel change table range)
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(26条)