我正在尝试获得使用黄瓜的端到端测试套件的代码覆盖率。我可以使测试成功运行,但是覆盖率显示为0,没有文件名。 通过bash脚本开始测试。
我已经成功让nyc与其他测试套件一起使用(这些套件使用mocha)。使用babel时,我已经搜索并使用了建议的nyc设置。
注意:我正在显示一个有效的测试脚本示例,该脚本确实显示覆盖率信息(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
预期:覆盖率报告
实际:运行测试,但没有覆盖报告