有人可以帮助我在Jest手动嘲笑吗? :) 我试着让Jest使用mock而不是实际的模块。
我的测试:
// __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"
答案 0 :(得分:1)
使用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
而不是整个模块来实现。
答案 1 :(得分:0)
就我而言,这是区分大小写的问题:
模块文件名:buyQuantity
我是如何嘲笑它的:Autosuggest.js
<-错误的情况