有人能帮我在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"
2条答案
按热度按时间wfsdck301#
模块mock在可能的情况下使用
babel-jest
转换提升,因此这将导致模拟的模块:如果一个模块应该根据测试基础被模拟,这将不起作用,因为
jest.mock
驻留在beforeEach
函数中。在这种情况下,应使用
require
:因为它不是一个导出,而是默认导出中的一个方法,应该被模拟,这也可以通过模拟
ModuleA.getModuleName
而不是整个模块来实现。1rhkuytd2#
这个答案与OPs问题并没有严格的关系,但是google让我在这里遇到了一个类似的问题,即文件根目录中的
jest.mock('module', () => ({}))
不起作用。在我的例子中,这是由循环依赖引起的。所以如果jest突然开始忽略对jest.mock()
的调用,那么你可能需要检查文件中的循环依赖。