Я считаю, что лучший способ - это проверить результат рендеринга.
Трудно ответить с помощью кода, так как мы не видим, как используется 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
.Вместо этого использование версии объекта может (и, вероятно, будет) создавать ошибки .