Шутка / Фермент.Проверьте, что метод называется - PullRequest
0 голосов
/ 01 июля 2019

У меня есть следующий Select компонент

getReason = () => {
        this.setState({
            productsRated: this.state.productsRated + 1
        });
};
...
<Select onChange={() => this.getReason()}>
</Select>
  1. Как проверить, что getReason был вызван, когда я имитирую изменение значения на <Select/>?
  2. Стоит ли вообще тестировать закрытый метод или я должен пропустить getReason метод в качестве реквизита?
  3. Если я стану опорой, как я буду называть setState?

1 Ответ

1 голос
/ 02 июля 2019

Я считаю, что лучший способ - это проверить результат рендеринга.

Трудно ответить с помощью кода, так как мы не видим, как используется this.state.productsRated.

Предположим, мы просто выводимthis.state.productsRated:

<Select onChange={this.getReason}
<span id="result">{this.state.productsRated}</span>

тогда наш тест будет

expect(someWrapper.find('#result').props().children).toEqual(2);
someWrapper.find(Select).props().onChange();
expect(someWrapper.find('#result').props().children).toEqual(3);

Также я не вижу никакой выгоды проверки, если была вызвана private функция.Когда вы тестируете детали реализации , ваши тесты становятся хрупкими и ломаются при изменениях, которые фактически не нарушают приложение.Также это не добавляет уверенности, если приложение в порядке или нет.

PS и для изменения состояния, когда вы используете предыдущее значение состояния для вычисления нового, вы должны использовать функциональную версию setState.Вместо этого использование версии объекта может (и, вероятно, будет) создавать ошибки .

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