简体   繁体   English

无法监视导入的类函数

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM