我在 Jest 中遇到了函数模拟问题,尤其是当一个函数在其内部调用另一个函数时。我正在使用 Jest 测试工具模块,其中 testBar 调用 testBar1。我试图模拟 testBar1 以确保 testBar 使用模拟值,但它没有按预期工作。
这是我目前的方法:
// Tools.test.ts
import { testBar } from './Tools';
jest.mock('./Tools', () => {
const originalModule = jest.requireActual('./Tools');
return {
...originalModule,
testBar1: jest.fn(() => 'mocked test2'),
};
});
test('should mock functions correctly', () => {
const result = testBar();
expect(result).toBe('testmocked test2');
});
// Tools.ts
export const testBar1 = () => {
return 'original test2';
};
export const testBar = () => {
return 'test' + testBar1();
};
问题是 testBar 仍然使用原始的 testBar1 值而不是模拟的值。我该如何解决这个问题?
感谢您的帮助!
您面临的问题是由于 Jest 模拟系统的工作方式造成的。当您使用 jest.mock 模拟模块时,模拟是在导入时应用的。这意味着当导入 testBar 时,它仍然引用原始的 testBar1,而不是模拟的版本。