Я пытаюсь получить покрытие кода комплексного набора тестов, в котором используется огурец. Я могу заставить тесты работать успешно, но покрытие показывает как 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
Ожидается: отчет о покрытии
Факт: тесты выполнены, но нет отчета о покрытии