2016-11-24 11 views
1

Я действительно новичок в Node и пытаюсь создать автономную программу. Я использую мокко и Chai, чтобы проверить мои функции (новые в этом, а), и я запускать их с помощью этого сценария запуска узла:Выход из командной строки Mocha + Chai с номером ошибки, равным номеру неудачного теста

"test": "mocha tools/testSetup.js \"src/**/*.spec.js\" --reporter progress" 

(я пытался без опции репортера, а). Тесты выполняются нормально, когда тест не удается, он продолжает запускать все остальное, а затем создает (довольно подробный) отчет о том, что не удалось. Но тогда тестовый костюм выходит из узла с кодом ошибки, равным количеству неудачных тестов, поэтому, если три теста не сработали, тогда код ошибки равен 3, если тесты не пройдены, тогда код ошибки равен 0. Это делает ужасный вывод, когда на по меньшей мере один тест завершается с ошибкой, аналогично тому, как приложение сбой.

Это по дизайну? я должен что-то сделать, чтобы «поймать» ошибку? Или я делаю что-то неправильно, и код выхода на самом деле должен быть равен 0 независимо от того, что тесты не сработали?

ответ

3

Это по дизайну?

Да, это так, как на части npm, так и на части Mocha.

Обычно, когда вы запускаете тестовый пакет, вы хотите, чтобы тестовый бегун имел ненулевой код выхода при сбое. Зачем? Необязательный код выхода упрощает для кода, который вызывает тестовый бегун, чтобы узнать, прошли ли тесты или нет. Нет необходимости разбирать отчет или что-то еще. Просто проверьте код выхода. В случаях, когда код, вызывающий тестовый бегун, не волнует, тогда он может просто игнорировать код выхода.

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

С точки зрения npm, жесткий отказ, который вы получаете, который выглядит как авария, также является целым. Проблема заключается в том, что npm часто используется для установки пакетов, а некоторые пакеты выполняют пробный запуск как часть их установки. Вы хотите, чтобы произошел сбой. Возможно, npm может быть спроектирован таким образом, чтобы отличать пользователя от выпускаемой программы npm test в командной строке, начиная с тестового прогона как часть установки. Это будет улучшением до npm, но текущее поведение не является случайным.

Я должен что-то сделать, чтобы «поймать» ошибку?

Если то, что вы хотите сделать, это предотвратить npm давать вам ELIFECYCLE ошибку, может нейтрализовать ошибку, делая mocha [parameters] || true, но это эффективно сделать бы что-нибудь, вызывающую npm test неспособной немедленно обнаружить, через код выхода , прошли ли тесты или нет. Любой инструмент, который вы можете использовать, зависит от npm test, не сможет узнать, прошли ли тесты или нет. Я бы этого не сделал.

Или я делаю что-то неправильно, и код выхода на самом деле должен быть равен 0, независимо от того, какие тесты не выполняются?

Нет, как объяснялось выше, код выхода из Mocha по дизайну. Если вы хотите изменить свой тестовый набор, чтобы попытаться обойти его, вы нарушите функцию.

Лично я обойти весь вопрос npm кричать небо падает, когда тест не пройден, вызывая мой тестовый набор за пределами npm (например, чаще всего это означает, что работает gulp test потому что я использую gulp для запуска строить задачи), и я оставляю за собой npm test для тех ситуаций, когда сбой при тестировании действительно является критическим сбоем.

0

Я почти использовал решение от @Luis, что некоторые люди могли бы сказать

Я бы не сделать это

тогда я пытался что-то очень простое, что я считал затруднительное

при выполнении ваших модульных испытаний NOT

npm run test 

использовать вместо

npm test 

легко Peasy