Модуль Jest Mock за тест

Я довольно запутался, насмехаясь над Jest, как выполнить тестирование тестов. Дело в том, что я хочу издеваться над другими ожидаемыми поведением.

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

jest.mock('the-package-to-mock', () => ({
  methodToMock: jest.fn(() => console.log('Hello'))
}));

import * as theThingToTest from '../../../app/actions/toTest'
import * as types from '../../../app/actions/types'

it('test1', () => {
  expect(theThingToTest.someAction().type).toBe(types.SOME_TYPE)
})

it('test2', () => {
  //the-package-to-mock.methodToMock should behave like something else
  expect(theThingToTest.someAction().type).toBe(types.SOME_TYPE)
})

внутренне, как вы можете себе представить, theThingToTest.someAction() использует the-package-to-mock.methodToMock

Ответы

Ответ 1

Вы можете высмеивать шпиона и импортировать издевательский модуль. В вашем тесте вы устанавливаете, как макет должен вести себя с использованием mockImplementation:

jest.mock('the-package-to-mock', () => ({
  methodToMock: jest.fn()
}));
import {methodToMock} from 'the-package-to-mock'

it('test1', () => {
  methodToMock.mockImplementation(() => 'someValue')
})

it('test2', () => {
   methodToMock.mockImplementation(() => 'anotherValue')
})

Ответ 2

spyOn работал лучше всего для нас. Смотрите предыдущий ответ:

fooobar.com/info/849341/...