Как покрыть onPress для touchableOpacity в библиотеке тестирования jest-цикла .map

Я пытаюсь написать тестовые примеры в React Native, используя Jest и Testing Library. У меня есть .map функция, которая отображает компонент с TouchableOpacity.

{data.map((item, index) => (
    <SafeAreaView key={index}>
        <ItemView data={item} index={index} />
        {index >= data.length - 1 ? (
            <View style={{ marginTop: 16 }} />
        ) : (
            <View style={styles.itmSeperator} />
        )}
    </SafeAreaView>
))}

ItemView выглядит как

const ItemView = ({ data, index }) => (
    <TouchableOpacity
        testID="TouchablePress"
        onPress={() => onPress(data)}
        style={{
            alignItems: "center",
            paddingVertical: 16,
        }}
    >
        <Text style={styles.text}>{data.name}</Text>
    </TouchableOpacity>
);

Для приведенного выше, если я вызываю fireEvent(getByTestId("TouchablePress"), "press"); в файле тестов, тест получает файл, в котором указано, что обнаружено несколько компонентов с тем же идентификатором TouchablePress.

Есть предложения о том, как пройти этот тест, не потерпев неудачу?


person Sai kiran    schedule 19.06.2021    source источник
comment
Вы можете получить их все, используя getAllByTestId, а затем выбрать первый, для которого действительно будет запущено действие press. ИЛИ задайте для каждого ItemView разные testID на основе их значения index, затем выберите нужный.   -  person juliomalves    schedule 20.06.2021
comment
@Saikiran см. Библиотеку тестирования реакции: проверьте, были ли элементы отображены / отрисованы. Сенсорная прозрачность здесь не критична, здесь используется getAllByTestId, как показано в ссылке и как Хулио описывает выше.   -  person ggorlen    schedule 30.06.2021