簡體   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());

我的測試用例:

    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 的初始化函數,因此拋出錯誤。

因為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/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