2016-01-28 4 views
2

Я работаю над учебником Redux here.Тестирование побочных эффектов в действиях Redux

В приложении, которое я создал, у меня есть действие с побочным эффектом, как показано на рисунке here в функции receivePosts, где вызывается Date.now().

Побочный эффект запускается после завершения асинхронной функции. Следуя this async test в моем собственном приложении. Я получаю ответ вида:

actual: 
{ 
    type: 'REQUEST_LEAGUE_SUCCESS', 
    receivedAt: 1453991947254, 
    league: 'Div 3', 
    resultsTable: [ [Object], [Object] ] 
}, 

expected: 
{ 
    type: 'REQUEST_LEAGUE_SUCCESS', 
    league: 'Div 3', 
    receivedAt: 1453991947235, 
    resultsTable: [ [Object], [Object] ] 
} 

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

receivedAt: Date.now() 

Структура моего кода точно так же, как код найден в учебнике Redux, кроме моего действия создателя, имеющие этот побочный эффект.

Мой вопрос сводится к: Как мне обрабатывать эти побочные эффекты, чтобы пройти мои тесты?

ответ

0

Тестовый код, который полагается на захват текущего времени, не является хорошей идеей. Вам нужно переписать все так, чтобы вы могли издеваться или вводить дату. Некоторые хорошие примеры делают это на http://www.toptal.com/qa/how-to-write-testable-code-and-why-it-matters. Эта статья основана на C#, но здесь применяется одна и та же концепция.

-1

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