无法监视导入的 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的初始化函数,因此抛出错误。

因为classAclassBinitialise方法是在导入模块时立即执行的,所以在导入这些模块之前需要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