#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
.