#typescript #react-native #testing #jestjs #react-native-testing-library
Вопрос:
Я провожу тестирование в первый раз, поэтому я почти уверен, что делаю что-то не так.
Я писал тестовый пример, и мой компонент делает это внутренне.
const {width, height} = Dimensions.get('window')
Для моего тестового случая я рассматривал iPhone 11, размеры которого width: 414, height:896
соответствуют , и я хочу, чтобы это соответствовало всем тестовым случаям.
Собственная библиотека тестирования React при тестировании задает ширину как 750
и высоту как 1334
.
Я хочу изменить его на размеры iPhone 11, я поискал в Интернете и нашел статьи, в которых используется jest.mock
функция изменения.
Поэтому я сделал что-то вроде этого
it('renders correctly', () => {
jest.mock("Dimensions", () => ({
get: jest.fn().mockReturnValue({ width: 414, height:896 }),
}))
const {getByTestId} = render(<Home />)
Home
у компонента есть console.log(width, height)
, но он по-прежнему дает ширину 750, а высоту 1334 (из-за чего мой тестовый случай терпит неудачу).
Как я могу это исправить?
Ответ №1:
Если вы хотите имитировать Dimensions.get
возвращаемое значение для каждого теста, вы можете создать следующую имитационную функцию с jest.doMock
помощью .
const mockDimensions = ({ width, height }) => {
jest.resetModules()
jest.doMock('react-native/Libraries/Utilities/Dimensions', () => ({
get: jest.fn().mockReturnValue({ width, height })
}))
}
Затем вызовите его в начале ваших тестов следующим образом.
it('renders correctly', () => {
mockDimensions({ width: 414, height: 896 })
const { getByTestId } = render(<Home />)
// Your assertions
})
jest.doMock
используется вместо jest.mock
того, чтобы избегать подъема, что позволяет нам моделировать размеры в каждом тесте, а не в глобальном масштабе.
Комментарии:
1. Это работает
ios
, но по какой-то причине это не удается вweb
среде , при использованииreact-native-web
которой я использую сjest-expo
конфигурацией