Как выполнить тесты мокко и мокко-phantomjs из одной команды "npm test" в node.js?

У меня есть несколько пакетов node, которые работают в среде node.js, а также в браузере. Теперь у меня есть два отдельных теста (для каждой среды). Каков наилучший способ запуска этих тестов с помощью команды npm test? Также я хочу добавить эти пакеты в travis.

Я использую mocha и mocha-phantomjs.

Node команда тестирования

node ./node_modules/mocha/bin/mocha ./test/node/index.js --reporter spec

Команда проверки браузера

node ./node_modules/mocha-phantomjs/bin/mocha-phantomjs ./test/browser/index.html

Что я пробовал:

  • Добавьте эти команды в npm test script, разделенные точкой с запятой
    • Проблема: при возникновении ошибки в первом script, но без ошибки во втором script, команда, завершенная с 0 и конструкцией travis, прошла.
  • Введите node командный тест в npm test script и создайте пользовательский script для тестов браузера. Затем добавьте эти две команды (npm test и npm run-script test-browser) в travis.yml как массив.
    • Проблема. Пользователи должны запускать вручную два независимых тестовых сценария.
  • Введите node командный тест в npm test script и добавьте тесты браузера в команду npm posttest. Travis.yml будет иметь только один script, и пользователям также придется запускать один script (все довольны).
    • Проблема: он просто не чувствует себя хорошо, поэтому я хотел знать, есть ли лучший способ.

Ответ 1

Мне нравится следующее:

  "scripts": {
    "test": "npm run test-node && npm run test-browser",
    "test-node": "mocha -R spec ./test/node/index.js",
    "test-browser": "mocha-phantomjs ./test/browser/index.html"}

&& работает только второй, если первый проходит, и вы можете запускать его отдельно, если хотите. Обратите внимание, что npm всегда использует относительный мокко (внутри node_modules), а не глобальный, поэтому нет вреда при прямом вызове mocha и mocha-phantomjs. Вы можете быть еще эффективнее с опцией mocha -b для залога, который будет уходить, как только он столкнется с ошибкой.

Ответ 2

Здесь вы искали информацию о настройке npm с помощью karma. @dankohn answer можно настроить следующим образом:

"scripts": {
  "test": "npm run test-node && npm run test-browser",
  "test-node": "karma run",
  "test-browser": "karma start --single-run"
}

Надеюсь, это поможет кому-то другому.

Ответ 3

Вы также можете использовать пакет npm-run-all:

npm install npm-run-all --save-dev

"scripts": {
  "test": "npm-run-all test-mocha test-mocha-phantomjs",
  "test-mocha": "mocha ./test/node/index.js --reporter spec",
  "test-mocha-phantomjs": "mocha-phantomjs ./test/browser/index.html"
}

Он будет запускать локальные копии mocha и mocha-phantomjs. Twitter bootstrap использует эту библиотеку для разработки.