我有一个名为functions.ts
的简单文件,其中包含:
export const log = console.log.bind(console);
在__mocks__/functions.ts
中还有一个jest Mock,借用自Jest requireActual()文档:
const originalModule = jest.requireActual("./functions");
// Quiet functions.log() during tests
export default {
__esModule: true, // Use it when dealing with esModules
...originalModule,
log: jest.fn(),
};
我希望使log()
函数无用,即函数不做任何事情(人们习惯于称之为no-op)。
import { runMe } from "./stackoverflow";
jest.mock("./src/backend/functions");
test(`pass, but make sure it doesn't log error messages`, () => {
runMe();
expect(true).toBeTruthy();
});
实际运行的函数:
import { log } from "./src/backend/functions";
export const runMe = () => {
console.log(`log is:`, log);
log(`Hello`);
};
的
console.log(`log is:`, log);
返回log is: undefined
。
如果我删除jest.mock("./src/backend/functions");
,一切都工作得很完美(但仍然是日志)。
**如何使用TypeScript和jest.requireActual()?**这样,当我运行runMe()
的测试时,它们将是安静的(但也是为了使funtions
中的其他函数仍然正常工作)?
1条答案
按热度按时间yfwxisqw1#
我最终不得不手动导出每个命名的导出,以确保
log()
被模拟,但functions
中的其他所有内容都工作。在
__mocks__/functions.ts
中:它不会像使用解构那样自动更新,但似乎这是唯一的方法。