Как дразнить импортированную именованную функцию в шутку, когда модуль не дразнят

У меня есть следующий модуль, который я пытаюсь протестировать в шутку:

// myModule.js

export function otherFn() {
  console.log('do something');
}

export function testFn() {
  otherFn();

  // do other things
}

Как показано выше, это экспортирует некоторые именованные функции и значительно testFn использование otherFn.

В шутку, когда я пишу свой модульный тест на testFn, Я хочу дразнить otherFn функционируйте, потому что я не хочу ошибок в otherFn влиять на мой модульный тест на testFn. Моя проблема - то, что я не уверен лучший способ сделать это:

// myModule.test.js
jest.unmock('myModule');

import { testFn, otherFn } from 'myModule';

describe('test category', () => {
  it('tests something about testFn', () => {
    // I want to mock "otherFn" here but can't reassign
    // a.k.a. can't do otherFn = jest.fn()
  });
});

Любая справка/понимание ценится.

59
задан 28 September 2016 в 21:48

1 ответ

Я знаю, что это спросили давным-давно, но я просто столкнулся с этой самой ситуацией и наконец нашел решение, которое будет работать. Таким образом, я думал, что совместно использую здесь.

Для модуля:

// myModule.js

export function otherFn() {
  console.log('do something');
}

export function testFn() {
  otherFn();

  // do other things
}

можно измениться на следующее:

// myModule.js

export const otherFn = () => {
  console.log('do something');
}

export const testFn = () => {
  otherFn();

  // do other things
}

экспорт их как константы вместо функций. Я полагаю, что проблема имеет отношение к подъему в JavaScript, и использование const предотвращает то поведение.

Затем в Вашем тесте у Вас может быть что-то как следующее:

import * as myModule from 'myModule';


describe('...', () => {
  jest.spyOn(myModule, 'otherFn').mockReturnValue('what ever you want to return');

  // or

  myModule.otherFn = jest.fn(() => {
    // your mock implementation
  });
});

Ваши насмешки должны теперь работать, как Вы обычно ожидали бы.

0
ответ дан 1 November 2019 в 12:36

Другие вопросы по тегам:

Похожие вопросы: