Как проверить функцию, которая возвращает случайный компонент React в Jest - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь протестировать функцию, которая возвращает случайно выбранный компонент React из массива. Ниже, у меня есть массив, который заполнен различными типами компонентов React.

collectionOfComponents = [
  <Component1 />
  <Component2 />
  <Component3 />
  <Component4 />
  <Component2 />
  <Component3 />
  ...
];

Затем у меня есть функция, которая будет выбирать случайный компонент из массива и возвращать этот компонент, как показано ниже.

export default () => {
  const totalNumberOfComponents = collectionOfComponents.length;
  const randomComponentIndex = Math.floor(Math.random() * totalNumberOfQuestions);
  const randomComponent = collectionOfComponents[randomComponentIndex];

  return cloneElement(randomComponent);
};

Я пытаюсь написать модульный тест, чтобы охватить эту функциональность, однако из-за случайно возвращенного компонента React не так просто, как я думал.

Я пытался смоделировать возврат функции, но это не охватывает все строки функции в отчете о покрытии шутов. Ниже я попробовал.

jest.mock('common/services/functionName', () => "Random Component");

it('should return random React component', () => {
  expect(functionName).toEqual('Random Component');
});

1 Ответ

0 голосов
/ 27 февраля 2020

Подумав больше о том, как протестировать функцию без каких-либо насмешек, я решил использовать следующий подход, поместив свою функцию в контейнер div и проверив, содержит ли оболочка какой-либо компонент из массива collectionOfComponents.

it('should return random React component', () => {
  const wrapper = shallow(
    <div>
      {functionName()}
    </div>
  );

  expect(wrapper.containsAnyMatchingElements([
    ... collectionOfComponents,
  ])).toEqual(true);
});

Я решил использовать containsAnyMatchingElements . Ниже приведено то, что об этом говорится в документации Enzyme API.

Возвращает, соответствует ли хотя бы один из заданных реагирующих элементов в patternNodes элементу в дереве визуализации оболочки. Один или несколько элементов patternNodes должны совпадать один или несколько раз. Совпадение следует правилам для containsMatchingElement.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...