mik*_*ana 3 unit-testing mocking typescript jestjs
我有一个名为的简单文件functions.ts,其中包含:
export const log = console.log.bind(console);
Run Code Online (Sandbox Code Playgroud)
__mocks__/functions.ts以及从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(),
};
Run Code Online (Sandbox Code Playgroud)
我希望使该log()函数无用,即该函数不执行任何操作(人们过去称之为无操作)。
import { runMe } from "./stackoverflow";
jest.mock("./src/backend/functions");
test(`pass, but make sure it doesn't log error messages`, () => {
runMe();
expect(true).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)
实际运行的函数是:
import { log } from "./src/backend/functions";
export const runMe = () => {
console.log(`log is:`, log);
log(`Hello`);
};
Run Code Online (Sandbox Code Playgroud)
这
console.log(`log is:`, log);
Run Code Online (Sandbox Code Playgroud)
返回log is: undefined。
如果我删除它,一切都会完美(但仍然记录)jest.mock("./src/backend/functions");。
如何使用 TypeScript 和 jest.requireActual()?即,当我运行它们时,测试runMe()会很安静(但其他功能仍然functions正常工作)?
小智 8
如果您想jest.requireActual与类型一起使用,只需将导入的类型作为参数传递即可。
像这样的东西应该有效:
import { log } from './functions';
jest.mock('./functions', () => ({
...jest.requireActual<typeof import('./functions')>('./functions'),
log: jest.fn(),
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3100 次 |
| 最近记录: |