使用mockImplementation时提示addNumbers未定义的问题排查
Jest 多测试用例自定义 Mock 实现问题解决
问题场景
现有测试代码结构如下,尝试为不同测试用例设置addNumbers的不同 Mock 实现,但运行时提示测试用例内addNumbers未定义。若在文件顶部直接 Mock 固定实现可正常运行,但无法满足多测试用例自定义逻辑的需求。
const request = require("supertest"); const app = require("../app"); jest.mock("./addFunc", () => ({ addNumbers: jest.fn() })); ... test("Testing add function with double result", () => { addNumbers.mockImplentation((a, b) => return 2 * (a + b)); let res = await request(app).post("/addNumbers").send({ a: 1, b: 2 }); expect(res.body.result).toBe(6); }); ... test("Testing add function with half result", () => { addNumbers.mockImplentation((a, b) => return (a - b) / 2); let res = await request(app).post("/addNumbers").send({ a: 6, b: 2 }); expect(res.body.result).toBe(2); }); ...
问题原因及解决步骤
- 未导入 Mock 后的模块:
addNumbers是./addFunc模块导出的方法,并非全局变量,必须显式导入才能在测试用例中访问。 - 拼写错误:代码中
mockImplentation存在拼写错误,正确写法是mockImplementation。 - 测试用例隔离:建议在每个测试用例执行前后重置 Mock,避免不同测试用例的 Mock 逻辑互相干扰。
修正后的代码示例
const request = require("supertest"); const app = require("../app"); // 导入mock后的模块,获取addNumbers方法 const { addNumbers } = require("./addFunc"); jest.mock("./addFunc", () => ({ addNumbers: jest.fn() })); // 每个测试用例前重置Mock,避免污染 beforeEach(() => { jest.clearAllMocks(); }); test("Testing add function with double result", async () => { // 修正拼写错误:mockImplementation addNumbers.mockImplementation((a, b) => { return 2 * (a + b); }); let res = await request(app).post("/addNumbers").send({ a: 1, b: 2 }); expect(res.body.result).toBe(6); }); test("Testing add function with half result", async () => { addNumbers.mockImplementation((a, b) => { return (a - b) / 2; }); let res = await request(app).post("/addNumbers").send({ a: 6, b: 2 }); expect(res.body.result).toBe(2); });
内容的提问来源于stack exchange,提问作者NodeFriend
相关产品推荐
相关产品推荐

