Модуль 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/...