React Test Renderer: findAllByProps возвращает двойное значение, которое должно быть найдено при поиске testID в React Native - PullRequest
3 голосов
/ 18 апреля 2019

Я использую React Test Renderer с Jest для тестирования моего приложения React Native.

Вот простой пример кода того, что я делаю:

it('renders one text', () => {
  const text = 'bar';
  const instance = renderer.create(
    <View>
      <Text testID="foo">{text}</Text>
    </View>
  ).root;
  expect(instance.findAllByProps({ testID: 'foo' }).length).toEqual(1);
});

it('renders two texts', () => {
  const text = 'bar';
  const instance = renderer.create(
    <View>
      <Text testID="foo">{text}</Text>
      <Text testID="foo">{text}</Text>
    </View>
  ).root;
  expect(instance.findAllByProps({ testID: 'foo' }).length).toEqual(2);
});

Первый тестне может сказать:

Expected: 1
Received: 2

И второй тест также не пройден:

Expected: 2
Received: 4

Почему реагирующий рендерер тестов, использующий findAllByProps, находит двойные экземпляры?

PS: В качестве проверки работоспособности я также попробовал findByProps, который работает:

it('renders one text', () => {
  const text = 'bar';
  const instance = renderer.create(
    <View>
      <Text testID="foo">{text}</Text>
    </View>
  ).root;
  expect(instance.findByProps({ testID: 'foo' }).props.children).toEqual(text);
});

1 Ответ

1 голос
/ 23 апреля 2019

Существует нерешенная проблема на Reaction-native

В настоящее время единственным обходным решением является:

const findAllByTestID = (instance) => instance.findAll(el => el.props.testID === 'foo' && el.type === 'Text');

expect(findAllByTestID(instance).length).toEqual(2);
...