我如何获得以bash脚本开始的测试的覆盖范围?

时间:2019-04-15 07:39:00

标签: javascript node.js automated-tests istanbul nyc

我正在尝试获得使用黄瓜的端到端测试套件的代码覆盖率。我可以使测试成功运行,但是覆盖率显示为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

预期:覆盖率报告
实际:运行测试,但没有覆盖报告

0 个答案:

没有答案