Шутка, издевательские размеры не меняются

#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 конфигурацией