Тестирование прессованного состояния прессованного

#react-native #jestjs #react-testing-library

#react-native #jestjs #react-testing-library

Вопрос:

У меня есть компонент, который отображает React Native Pressable и использует pressed состояние для изменения отображения:

 <Pressable testID="t">
  {({ pressed }) => <Text style={pressed ? pressedStyle : unPressedStyle }>{title}</Text>
<Pressable>
  

Это работает нормально, но когда я запускаю отчет о тестовом покрытии, pressed состояние пропускается. Это происходит, даже если я запускаю press событие для нажимаемого, например:

 const { getByTestID } = render(<PressableComponent />);
const pressable = getByTestID('t');
fireEvent.press(pressable);
  

Есть ли какой-либо способ вызвать pressed состояние во время тестирования, чтобы я мог протестировать эту ветку?

Комментарии:

1. Я знаю, что это не совсем одно и то же, но получаете ли вы много радости от тестирования onPressIn или onPressOut ? Согласно reactnative.dev/docs/pressable , он запускает их перед запуском onPress . Это не решение, но может помочь в отладке проблемы.

2. @ourmaninamsterdam спасибо за предложение… Я больше заинтересован в улучшении тестового покрытия, а не в поиске конкретных проблем.

3. Нет проблем. @ Взрывные таблетки. Дайте нам знать, если вам удастся решить эту проблему, поскольку я очень хочу знать для своих собственных целей.

Ответ №1:

Вы можете использовать testOnly_pressed свойство RN Pressable component . Если задано true значение, оно имитирует нажатое состояние в тестах.

 <Pressable testID="t" testOnly_pressed={isStatusPressedForTest}>
  {({ pressed }) => <Text style={pressed ? pressedStyle : unPressedStyle }>{title}</Text>
<Pressable>


const { getByTestID } = render(<PressableComponent isStatusPressedForTest />);
  

Тогда больше не нужно запускать событие press.
Просто ожидайте, что вы ожидаете, что произойдет в состоянии pressed .