Как я могу включить тесты Mocha и Karma (на стороне сервера и на стороне клиента) в одну кодовую базу / package.json?

У меня есть 2 тестовых файла в ./test.

Допустим, test1.js — это тест Mocha, который запускает сервер и выполняет различные запросы к URI, чтобы определить, все ли они ведут себя так, как ожидалось.

test2.js — это тест Mocha, который использует Karma для загрузки определенных скриптов (включая angular-mocks.js) и запускает их в нескольких браузерах, чтобы гарантировать, что все функциональные возможности здесь работают должным образом.

В package.json у меня есть свойство test, настроенное как таковое:

"scripts": {
  "test": "./node_modules/.bin/mocha --reporter spec -t 5000"
},

Круто, я могу npm test из командной строки запустить Mocha. Но нет, Mocha запускает оба моих скрипта, и test2.js, конечно же, приводит к сбою всего этого, поскольку логика в нем предполагает, что он работает в контексте Karma (извините, если я не описываю это должным образом).

У меня могло бы быть 2 тестовых папки, test и test-ng или что-то в этом роде, но я думаю, что в конечном итоге я хочу иметь возможность npm test и запускать разные наборы тестов, т.е.:

"./node_modules/.bin/mocha --reporter spec -t 5000"
"./node_modules/.bin/karma start"

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

Изменить: Должен ли я думать/организовывать свои тесты таким образом?

./tests/server/**.js
./tests/e2e/**.js
./tests/unit/**.js

Возможно, я делал предположения, основанные на том факте, что npm по умолчанию использует папку ./test/.

Изменить 2: сейчас я делаю то, что описал выше, более или менее, и мои тесты описаны в файле readme репозитория, например:

Модульные тесты Angular можно запускать через Karma: ./node_modules/.bin/karma start karma.conf.js

Сквозные тесты Angular можно запускать через Protractor: ./node_modules/.bin/protractor protractor.conf.js

Экспресс модульные тесты можно запускать через Mocha: ./node_modules/.bin/mocha ...

Итак, теперь я вообще не использую npm test, и мне интересно, какие преимущества дает это использование.


person Charlie Schliesser    schedule 26.02.2016    source источник
comment
Кто бы ни проголосовал за закрытие, я бы сказал, что это вовсе не мнение. Я мог бы переименовать заголовок вопроса в «Как у вас может быть 2 разных набора тестов в директиве сценария npm», но это не будет таким пояснительным.   -  person Charlie Schliesser    schedule 26.02.2016
comment
Можете ли вы настроить файлы include/exclude в mocha и Karma?   -  person Yosef Weiner    schedule 09.03.2016


Ответы (1)


Вы можете поместить что-то вроде этого в свой package.json:

"scripts": {
  "unittest": "mocha --reporter spec tests/test1.js",
  "browsertest": "mocha --reporter spec -t 5000 tests/test2.js",
  "test": "npm run unittest && npm run browsertest"
}

и у Mocha (или Karma и т. д.) есть сценарий, каждый из которых может запускаться индивидуально, например.

$ npm run browsertest

Есть несколько преимуществ помещения всех частей системы сборки непосредственно в скрипты в package.json:

  • Вы можете не устанавливать пакеты npm глобально или использовать такие заклинания, как ./node_modules/.bin/mocha, потому что npm уже знает о ./node_modules/.bin.
  • Помещение всего в скрипты npm упрощает расширение стандартных операций npm (start, stop, test и т. д.), что, в свою очередь, упрощает совместную работу с другими людьми, а также с фреймворками (например, Phusion Passenger).
  • Вам не нужны Grunt, Gulp и т.д.

И вы можете использовать npm run, чтобы получить список ваших скриптов.

Более подробное описание преимуществ см. в отличный пост в блоге.

person J P    schedule 09.03.2016
comment
Аргх, я полностью пропустил это: ▶ npm run -h; npm run-script <command> [-- <args>]. Спасибо, что поделился. Не могли бы вы рассказать о преимуществах включения команд в scripts? Это просто для того, чтобы избавить команды от необходимости печатать? - person Charlie Schliesser; 09.03.2016
comment
Спасибо за подробности о npm run и т. д. Хорошего дня :) - person Charlie Schliesser; 10.03.2016