2015-07-29 3 views
0

Быстрый вопрос для this.setState(...), очевидно, является асинхронным действием, а модульное тестирование является синхронным, так как точно вы гарантируете, что результат тестирования setsState будет успешно протестирован? IE setState устанавливает правильные значения?ReactJS: Как проверить изменение состояния

Вы делаете это через обратный вызов? Spy/Stub?

Просто пытаюсь найти оптимальный подход.

Спасибо

ответ

2

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

Например, каждый раз, когда вы вводите что-то на input, состояние должно измениться. Вы можете передать обработчик onInputChange как prop, который выполняется каждый раз, когда состояние завершится сменой из-за изменения ввода. Это событие, о котором я говорил, имеет смысл только для компонентов uncontrollable. Если компонент был controllable, событие будет срабатывать по мере ввода, и было бы ответственностью controller-component, чтобы повторно перенести компонент в результате изменения ввода.

Что касается тестов, модульные тесты не обязательно синхронны .. На самом деле, в моем случае, я часто использую обратный вызов done. Как это:

it('test something', (done) => { myModule.doSomething((error, success) => done()); }); 

Приведенный выше пример будет работать на karma и mocha, например.

+0

Ну, это работает, но можете ли вы это сделать без использования обработчика обратного вызова в setState? Я бы хотел избежать изменения кода для поддержки тестов. – adrian

+0

Я боюсь, что специально для «неконтролируемых» компонентов вы не можете. Единственный способ признать изменение состояния - это передать этот обработчик. Невозможно вызвать синхронно «setState», о котором я знаю. Я просто проверил документы снова, чтобы быть уверенным. –

+0

Хорошо, получилось, мне просто кажется, что вам всегда нужно настраивать свой код, чтобы следить за тем, что происходит, без ручного переопределения setstate, чтобы увидеть, вызвано ли оно правильными данными. – adrian

Смежные вопросы