Проверка пройденной функции как пропел с шуткой - PullRequest
0 голосов
/ 11 февраля 2019

Сборка компонента из react-dates, у меня есть что-то вроде:

<DayPickerRangeController
    // some props...
    isDayBlocked={day => isDayBlocked(a, someObject)}
/>

Я хочу проверить, правильно ли я передаю функцию формы day => isDayBlocked(a, someObject).

Так что в моемУ меня есть тест:

import isDayBlocked from './isDayBlocked'

jest.mock('./isDayBlocked', () => () => {})

, а затем для тестирования:

expect(wrapper.find(DayPickerRangeController).props().isDayBlocked).toBe(
      () => isDayBlocked,
);

Но я получаю:

expect(received).toBe(expected) // Object.is equality

Expected: [Function anonymous]
Received: [Function isDayBlocked]

Как мне пройти тест?

1 Ответ

0 голосов
/ 12 февраля 2019

Вы пытаетесь сопоставить тело функции.Это не работает таким образом.Вы можете сравнить .toString() результат, но уверен, что это не означает, что один и тот же основной текст означает одинаковое выполнение (из-за использования замыканий / глобальных переменных).

Так что вы можете сделать?

Выможет тестировать функцию, которую вы передаете, как и любую другую функцию: предоставляя различные входные данные и делая утверждения на основе выходных данных.

wrapper.callSomethingToChangeState();
expect(wrapper.find(DayPickerRangeController).props().isDayBlocked('day1'))
    .toBeFalsy();
expect(wrapper.find(DayPickerRangeController).props().isDayBlocked('day2'))
    .toBeFalsy();
expect(wrapper.find(DayPickerRangeController).props().isDayBlocked('day3'))
    .toBeTruthy();

Если ваш isDayBlocked зависит от какого-то внутреннего состояния ваших компонентов, вы, вероятно, захотите составить несколько разныхit() для охвата различных классов входных данных

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