Как я могу получить информацию о тестах, запущенных с помощью bash-скрипта? - PullRequest
0 голосов
/ 15 апреля 2019

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

Я успешно получил nyc, работающий с другими наборами тестов (они используют mocha). Я искал и использовал рекомендуемые настройки для nyc при использовании babel.

ПРИМЕЧАНИЕ. Я показываю пример рабочего сценария тестирования, который отображает информацию о покрытии (test: unit). Единственное отличие, которое я считаю, состоит в том, что модульные тесты вызывают mocha, тогда как мои тесты e2e вызывают скрипт bash.

package.json

"scripts": {
    ...
    "test:e2e": "dotenv -e envs/test.env -e envs/.env ./scripts/e2e.test.sh",
    "test:e2e:coverage": "cross-env NODE_ENV=test nyc npm run test:e2e",
    "test:unit": "mocha \"src/**/*.unit.test.js\"",
    "test:unit:coverage": "cross-env NODE_ENV=test nyc npm run test:unit",
    ...
  }

.babelrc

{
  "presets": [
    [
      "@babel/env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ],
  "env": {
    "test": {
      "plugins": ["istanbul"]
    },
    "debug": {
      "retainLines": true
    }
  }
}

.nycrc

{
  "require": [
      "@babel/register"
    ],
    "reporter": [
      "lcov",
      "text"
    ],
  "sourceMap": false,
  "instrument": false,
  "exclude": [
    "coverage/**",
    "packages/*/test/**",
    "test/**",
    "test{,-*}.js",
    "**/*{.,-}test.js"
    ,"**/__tests__/**",
    "**/node_modules/**",
    "dist/",
    "spec/",
    "src/**/*.test.js",
    "src/tests/**"
  ]
}

ПРИМЕЧАНИЕ. Из-за некоторых проблем у меня работали тесты e2e (проблема заключалась в использовании Windows, когда я не мог заставить сервер работать в фоновом режиме, чтобы тесты выполнялись после его запуска), мне пришлось их запускать используя приведенный ниже скрипт и пакетный файл.

e2e.test.sh

#!/usr/bin/env bash
RETRY_INTERVAL=${RETRY_INTERVAL:-0.2}
echo Setting up environment for end-to-end tests...
yarn run build > /dev/null
echo Checking elasticsearch service is running...
yarn run es-init > /dev/null
curl --silent -o /dev/null -X DELETE "$ELASTICSEARCH_HOSTNAME:$ELASTICSEARCH_PORT/$ELASTICSEARCH_INDEX"
echo "Ensuring test server is (re)started..."
if netstat -aon | grep "0.0.0.0:$SERVER_PORT" | grep "LISTENING"; then
  echo Test server is running...
  pm2 delete serve
  until ! netstat -aon | grep "0.0.0.0:$SERVER_PORT" | grep "LISTENING"; do
    echo Waiting for test server to stop...
    sleep $RETRY_INTERVAL
  done
  echo  Restarting...
  pm2 start ./scripts/serve.js
  until netstat -aon | grep "0.0.0.0:$SERVER_PORT" | grep "LISTENING"; do
    echo Waiting for test server to start...
    sleep $RETRY_INTERVAL
  done
  echo Test server restarted...
fi > /dev/null
if ! netstat -aon | grep "0.0.0.0:$SERVER_PORT" | grep "LISTENING"; then
  echo Test server is not running...
  pm2 start ./scripts/serve.js
  until netstat -aon | grep "0.0.0.0:$SERVER_PORT" | grep "LISTENING"; do
    echo Waiting for test server to start...
    sleep $RETRY_INTERVAL
  done
  echo Test server started...
fi > /dev/null
echo Running tests...
npx cucumber-js spec/cucumber/features --require-module @babel/register --require spec/cucumber/steps
pm2 delete serve

serve.js

var exec = require('child_process').exec;
exec('babel-node src/index.js', { windowsHide: true });

Файловая структура

├───batchfiles
├───dist
├───envs
├───scripts
└───src

Ожидается: отчет о покрытии
Факт: тесты выполнены, но нет отчета о покрытии

...