javascript - 无法监视导入的类函数
问题描述
import startUp from 'startup';
import classA from '...';
import classB from '...';
startUp.ready.then(classA.initialise(), classB.initialise());
我的测试用例:
it('invokes its initialisation function during the import of ./initialiser', () => {
jest.spyOn(classA, 'initialise').mockImplementation(() => {});
jest.spyOn(classB, 'initialise').mockImplementation(() => {});
// Some more test cases
expect(classA.initialise).toHaveBeenCalledWith();
expect(classA.initialise).toHaveBeenCalledWith();
});
运行测试用例,它会尝试测试 classA 和 classB 的初始化函数,从而引发错误。
解决方案
因为and的initialise
方法在导入模块时会立即执行,所以需要在导入这些模块之前进行 mock。classA
classB
index.ts
:
import classA from './classA';
import classB from './classB';
classA.initialise();
classB.initialise();
classA.ts
:
export default {
initialise() {},
};
classB.ts
:
export default {
initialise() {},
};
index.test.ts
:
import classA from './classA';
import classB from './classB';
describe('63797764', () => {
it('invokes its initialisation function during the import of ./initialiser', async () => {
jest.spyOn(classA, 'initialise').mockImplementation(() => console.log('mocked classA initialise'));
jest.spyOn(classB, 'initialise').mockImplementation(() => console.log('mocked classB initialise'));
await import('./');
expect(classA.initialise).toBeCalled();
expect(classA.initialise).toBeCalled();
});
});
单元测试结果:
PASS src/stackoverflow/63797764/index.test.ts (10.906s)
63797764
✓ invokes its initialisation function during the import of ./initialiser (21ms)
console.log src/stackoverflow/63797764/index.test.ts:6
mocked classA initialise
console.log src/stackoverflow/63797764/index.test.ts:7
mocked classB initialise
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 12.367s
推荐阅读
- javascript - 如何从 onclick 事件中显示列和行中的数据
- python - 列表类型不可调用
- vue.js - Vue变量未在方法的异步中更新
- angular - 当数据未更改时,Angular 11 Router 可观察数据未更新
- json - 无法将 JSON 数据打印到 Dart 对象中 - “'对象'的实例”
- javascript - 使用 jquery 从任何下拉列表中获取值
- javascript - 未捕获的错误:目标容器不是 DOM 元素
- python - 如何将两个 DateTimeFields 与当前时间进行比较
- python - 如何使用 PyTorch 编码器重塑多通道图像?
- java - 修复 React 项目中的复选框