шутник. Как вы тестируете вызов функции внутри функции из того же модуля? - PullRequest
0 голосов
/ 14 февраля 2020

Я использую Jest для тестирования в моем проекте.

Вот моя ситуация.

//myModule.js

export const funcA = () =>{};
export const funcB = ()=>{
  funcA();
}
//myModule.test.js
import {funcA,funcB} from './myModule'

describe("funcB",()=>{

  it ("should call funcA",
    ()=>{
     funcB(); // execute b function
     expect(funcB).toHaveBeenCalled(); // hypothetically I would like to do this. check funcA
    }
  )
});

Есть ли способ достичь этого? Моя текущая ситуация не позволяет мне передавать funcA в качестве аргумента funcB.

Любые мысли и идеи будут полезны! Спасибо

1 Ответ

0 голосов
/ 10 апреля 2020

Вот решение для модульного теста:

myModule.ts:

export let funcA = () => {};
export const funcB = () => {
  exports.funcA();
};

myModule.test.ts:

import * as mod from './myModule';

describe('funcB', () => {
  it('should call funcA', () => {
    jest.spyOn(mod, 'funcA');
    mod.funcB();
    expect(mod.funcA).toHaveBeenCalled();
  });
});

Результаты модульного теста с отчетом о покрытии:

 PASS  stackoverflow/60221752/myModule.test.ts (8.763s)
  funcB
    ✓ should call funcA (3ms)

-------------|---------|----------|---------|---------|-------------------
File         | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------|---------|----------|---------|---------|-------------------
All files    |     100 |      100 |     100 |     100 |                   
 myModule.ts |     100 |      100 |     100 |     100 |                   
-------------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        10.308s
...