通过Shell脚本包装器运行节点模块的伊斯坦布尔测试覆盖范围



我的软件包中的脚本。当前看起来像这样:

"scripts": {
  "test": "./spec/run-local-tests.sh",
  "coverage": "istanbul cover jasmine-node spec",
  "start": "gulp"
}

测试脚本运行此.SH文件:

#!/bin/sh
echo "Renaming database file produced by previous test run"
mv -f 'shared-local-instance.db' 'shared-local-instance.db.previous'
echo "Starting DynamoDB"
java -Djava.library.path=./DynamoDBLocal_lib -jar dynamodb/DynamoDBLocal.jar -sharedDb &
export JAVA_PID=$!
echo "Running Tests"
./node_modules/jasmine-node/bin/jasmine-node spec
echo "Cleaning up DynamoDB - killing local instance"
kill -9 $JAVA_PID

但是,我现在想更改我的 coverage脚本以运行shell文件:

"coverage": "istanbul cover ./spec/run-local-tests.sh"

,但我遇到了一个错误,上面写着:

echo "Renaming database file produced by previous test run"
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Unexpected string

有没有一种方法可以让Instanbul和我的外壳文件运行?

rtfm。

伊斯坦布尔文档说:

cover命令可用于获取一个覆盖对象,并报告任何任意节点脚本

(强调我的)

istanbul cover需要一个节点脚本。它不能对Shell脚本或任何其他任意可执行执行操作。

您可以编写一个执行所需设置/清理的shell脚本,然后启动istanbul cover,然后进行配置:

"scripts": {
  "test": "./spec/run-local-tests.sh",
  "coverage": "./spec/run-local-tests-with-coverage.sh",
  "start": "gulp"
}

或者您可以修改现有脚本,也许是这样:

echo "Running Tests"
${COVERAGE} ./node_modules/jasmine-node/bin/jasmine-node spec

然后使用环境变量集来调用它:

"scripts": {
  "test": "./spec/run-local-tests.sh",
  "coverage": "env COVERAGE='istanbul coverage' ./spec/run-local-tests.sh",
  "start": "gulp"
}

最新更新