我正在使用Travis for CI。由于某些原因,即使某些测试失败,构建也会通过。在此处查看完整日志
https://travis-ci.org/msm1089/hobnob/jobs/534173396
我运行测试的方式是通过bash脚本e2e.test.sh,该脚本由yarn运行。
搜索此特定问题并没有任何帮助。我认为这与退出代码有关。我想我需要以某种方式使构建以非零值退出,但是正如您在日志底部所看到的那样,yarn退出时为0。
e2e.test.sh
#!/usr/bin/env bash
RETRY_INTERVAL=${RETRY_INTERVAL:-0.2}
# Run our API server as a background process
if [[ "$OSTYPE" == "msys" ]]; then
if ! netstat -aon | grep "0.0.0.0:$SERVER_PORT" | grep "LISTENING"; then
pm2 start --no-autorestart --name test:serve "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" -- run test:serve
until netstat -aon | grep "0.0.0.0:$SERVER_PORT" | grep "LISTENING"; do
sleep $RETRY_INTERVAL
done
fi
else
if ! ss -lnt | grep -q :$SERVER_PORT; then
yarn run test:serve &
fi
until ss -lnt | grep -q :$SERVER_PORT; do
sleep $RETRY_INTERVAL
done
fi
npx cucumber-js spec/cucumber/features --require-module @babel/register --require spec/cucumber/steps
if [[ "$OSTYPE" == "msys" ]]; then
pm2 delete test:serve
fi
travis.yml
language: node_js
node_js:
- 'node'
- 'lts/*'
- '10'
- '10.15.3'
services:
- elasticsearch
before_install:
- curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.deb
- sudo dpkg -i --force-confnew elasticsearch-6.6.1.deb
- sudo service elasticsearch restart
before_script:
- sleep 10
env:
global:
- NODE_ENV=test
- SERVER_PROTOCOL=http
- SERVER_HOSTNAME=localhost
- SERVER_PORT=8888
- ELASTICSEARCH_PROTOCOL=http
- ELASTICSEARCH_HOSTNAME=localhost
- ELASTICSEARCH_PORT=9200
- ELASTICSEARCH_INDEX=test
package.json
...
scripts:{
"test": "yarn run test:unit && yarn run test:integration && yarn run test:e2e"
}
...
那么,如何确保黄瓜退出代码是返回的代码,以便在测试未通过时构建失败,如应该的那样?
答案 0 :(得分:1)
有几种方法可以解决此问题。这是我最喜欢的两个。
选项1:
在您的bash脚本的顶部添加`auth: {
api_key: config.mailer.auth.pass
,以便它在出现第一个错误时退出,保留退出代码,然后在Travis失败(如果非零的话)。
选项2:
捕获所需的任何退出代码,并在有意义的地方随其退出。
set -e
请注意-您的bash脚本似乎职责过多。如果可以的话,我会考虑将它们分开,然后为travis提供要运行的命令列表,以及可能的一个或两个run whatever command here
exitcode=$?
[[ $exitcode == 0 ]] || exit $exitcode
命令。
遵循以下原则:
before_script