NoneFire Event on SegmentedControlIOS

Я использую реагирующую нативную библиотеку тестирования - https://callstack.github.io/react-native-testing-library/docs/getting-started

у меня есть <SegmentedControlIOS> - https://facebook.github.io/react-native/docs/segmentedcontrolios

Я хочу прес первый сегмент. Я делаю это:

const testID = "SegmentedControl";
const stub = jest.fn();
const values = [{ label: "foo" }];
const { getByTestId } = render(
  <SegmentedControlIOS values={['foo', 'bar']} onChange={stub} testID={testID} />
);

expect(() => {
  getByTestId(testID);
}).not.toThrow();

fireEvent(getByTestId(testID), "change ", {
  nativeEvent: {
    value: values[0],
    selectedSegmentIndex: 0,
  },
});

Однако я получаю ошибку:

No handler function found for event: "change "

Снимок экрана ниже. Кто-нибудь знает, как нажимать на разные сегменты в <SegmentedControlIOS>?

1 ответ

Решение

fireEvent(элемент: ReactTestInstance, eventName: строка, ...data: Array): void

change Функция находится в fireEvent объект. Вот как это использовать:

Версия 5 или более поздняя:

fireEvent.change(getByTestId(testID), { target: { value: values[0],selectedSegmentIndex: 0 } });

Версия 5 или раньше:

const input = getByTestId(testID);
  input.value = values[0];
  input.selectedSegmentIndex = 0;
  fireEvent.change(input);

Если вы хотите проверить onChange функция SegmentedControlIOS,

с помощью fireEvent с родными событиями, которые еще не связаны с fireEvent апи.

// you can omit the `on` prefix
fireEvent(getByTestId(testID), 'onChange');

Здесь было опубликовано решение, я его еще не пробовал, но мне кажется, оно выглядит более правильным - https://github.com/callstack/react-native-testing-library/issues/220

import React from "react";
import { SegmentedControlIOS } from "react-native";
import { fireEvent, render } from "react-native-testing-library";

const testID = "SegmentedControl";
const stub = jest.fn();
const values = [{ label: "foo" }];
const { getByTestId } = render(
  <SegmentedControlIOS
    values={["foo", "bar"]}
    onChange={stub}
    testID={testID}
  />,
);
it("sends events", () => {
  fireEvent(getByTestId(testID), "onChange", {
    nativeEvent: {
      value: values[0],
      selectedSegmentIndex: 0,
    },
  });
});
Другие вопросы по тегам