无法监视导入的 class 函数
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());
我的测试用例:
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();
});
运行 test cases 它试图测试classA和classB的初始化函数,因此抛出错误。
因为classA
和classB
的initialise
方法是在导入模块时立即执行的,所以在导入这些模块之前需要mock。
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/Whosebug/63797764/index.test.ts (10.906s)
63797764
✓ invokes its initialisation function during the import of ./initialiser (21ms)
console.log src/Whosebug/63797764/index.test.ts:6
mocked classA initialise
console.log src/Whosebug/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
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();
});
运行 test cases 它试图测试classA和classB的初始化函数,因此抛出错误。
因为classA
和classB
的initialise
方法是在导入模块时立即执行的,所以在导入这些模块之前需要mock。
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/Whosebug/63797764/index.test.ts (10.906s)
63797764
✓ invokes its initialisation function during the import of ./initialiser (21ms)
console.log src/Whosebug/63797764/index.test.ts:6
mocked classA initialise
console.log src/Whosebug/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