[英]Cannot spy on a class functions that is imported
import startUp from 'startup';
import classA from '...';
import classB from '...';
startUp.ready.then(classA.initialise(), classB.initialise());
My test cases:我的测试用例:
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();
});
Running test cases it tries to test the initialise function of classA and classB, hence throwing error.运行测试用例它试图测试 classA 和 classB 的初始化函数,因此抛出错误。
Because the initialise
method of classA
and classB
are executed immediately when the modules are imported, you need to mock before importing the these modules.因为classA
和classB
的initialise
方法是在模块导入的时候立即执行的,所以在导入这些模块之前需要mock一下。
index.ts
: index.ts
:
import classA from './classA';
import classB from './classB';
classA.initialise();
classB.initialise();
classA.ts
: classA.ts
:
export default {
initialise() {},
};
classB.ts
: classB.ts
:
export default {
initialise() {},
};
index.test.ts
: 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();
});
});
unit test result:单元测试结果:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.