【发布时间】:2022-01-24 16:09:30
【问题描述】:
假设我有一个模块如下:
// utils.ts
function innerFunction() {
return 28;
}
function testing() {
return innerFunction();
}
export {testing}
我想编写一个单元测试来测试testing 并模拟innerFunction 的返回值,期望任何对innerFunction 的调用都会解析为某个值,如下所示:
jest.mock('../utils', () => {
const originalModule = jest.requireActual('../utils');
return {
// __esModule: true,
...originalModule,
innerFunction: jest.fn().mockReturnValue(33),
};
});
import { testing } from '../utils';
it('should be okay', () => {
expect(testing()).toBe(33);
});
我原以为jest.requireActual 将能够读取所有函数,而innerFunction: jest.fn().mockReturnValue(33) 实际上会导致任何innerFunction 调用只返回33 作为值,但从上面的小实验看来,这不是案例。
在实际调用中 innerFunction 将返回 28,但在 Jest 环境中我希望 innerFunction 能够解析为我想要的任何值
【问题讨论】:
-
但真正的答案是:你不应该喜欢。尊重模块边界或移动它,测试行为而不是实现细节。
标签: javascript typescript jestjs