2017-01-18 11 views
1

Я использую React-скриптов, которые включают в себя шутку для запуска тестов на моем Redux модели (не используя много реагировать еще, по-прежнему строят из данных.Тестирование перевождь/реагируют с шуткой erroring на WebWorker

Я использую WebWorker для извлечения данных с помощью Ajax запроса.

Когда я запускаю свои тесты, Reference Error: Worker is not defined.

Я попытался установить библиотеку рабочих НОЙ и включают в себя, что в качестве глобальной в моем test.spec файла через import * as global.Worker from "webworker", но это не включает веб-исполнителя в моих тестах.

Я хочу, чтобы в моем источнике не было веб-исполнителя, поскольку он не нужен в браузере, но мне бы хотелось, чтобы он тестировался или я не тестировал рабочий код, по крайней мере, мои тесты не были ошибка, так как в файле указывается рабочий.

+0

Попробовали 'import worker from 'webworker'; global.worker = worker'? –

ответ

1

Im не знаком с реагирующим-скриптами, но я бы сказал так:

1) блок испытание не должно испытывать или даже запуск внешних ресурсов (например, WebWorker) - изоляция является ключевым в блоке тесты

-) redux, в частности, редукторы не должны полагаться или выполнять код, полагаясь на внешние ресурсы или состояние, - они должны быть pure

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

один вопрос: Вы упомянули «Redux модель», это связано с чем-то вроде redux-orm или просто, как вы называете ваши редукторы

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

В качестве долгосрочного предложения я бы порекомендовал вам взглянуть на что-то вроде redux-thunk или redux-saga, чтобы выполнить вашу работу с асинхронным доступом.

+0

Я полностью согласен с вами, и я не звоню веб-работнику в своем модульном тесте. Однако мой код включает в себя модуль, который включает веб-исполнителя, который вызывает эту ошибку. Я уже использую redux-thunk, хотя я не уверен, как это происходит вокруг рабочего. Как я уже сказал, работник никогда не звонил, ошибка, которую я получаю, просто говорит, что она не определена. – pedalpete

+1

По-прежнему кажется, что ваш тест вызывает слишком много кода для выполнения. Единичный тест должен проверять только одну функцию. Если другой модуль работает с веб-мастером, тогда ваш тест недостаточно изолирован. Этот модуль следует издеваться. – poeticGeek

+0

Это справедливо. Но где-то в стороне от этого кода придется называть веб-исполнителя, поэтому не импортировать веб-исполнителя вообще или включать его в другое место, это будет странно ... Я попробую. – pedalpete