#javascript #reactjs #unit-testing #jestjs #react-testing-library
#javascript #reactjs #модульное тестирование #jestjs #react-testing-library
Вопрос:
вопрос об использовании Jest для создания метода из сторонней библиотеки. итак, у меня есть компонент, реализованный следующим образом
import {foo} from 'bar'
function Component() {
// use foo somewhere in the component
}
и в тесте я пытался создать макет foo
, поэтому
import {foo} from 'bar'
jest.mock('bar')
test('test', () => {
foo.mockReturnValue(...)
})
это работает нормально, но как только я перейду jest.mock('bar')
к каждому отдельному test
блоку, jest сообщит об ошибке, в которой говорится, что foo.mockReturnValue
это не функция. например, так
test('test', () => {
jest.mock('bar')
foo.mockReturnValue(...) // 👈🏻 error: `foo.mockReturnValue` is not a function
})
Проблема в том, что я хочу создавать макет bar
на каждом test
уровне, а не на глобальном уровне, который влияет на весь тестовый файл. есть ли способ сделать это?
Ответ №1:
Поскольку вы хотите выполнять макет foo
на каждом уровне тестирования, имеет смысл сохранять bar
mocked глобально и использовать beforeEach()
или afterEach()
сбрасывать mocked функцию до или после каждого запуска теста.
import {foo} from 'bar';
jest.mock('bar');
afterEach(() => {
foo.mockReset();
})
test('test', () => {
foo.mockReturnValue(...);
})
Вы захотите использовать .mockReset()
для удаления издевательских реализаций и возвращаемых значений из foo
; альтернативно, .mockClear()
может использоваться, если реализация и возвращаемое значение для foo
остаются неизменными для каждого теста. Подробнее о разнице читайте здесь .