Испытания огурца не пройдены, но сборка Трэвиса все еще проходит - PullRequest
0 голосов
/ 19 мая 2019

Я использую Travis для CI.По какой-то причине сборки проходят, даже если некоторые тесты не пройдены.Смотрите полный журнал здесь

https://travis -ci.org / msm1089 / hobnob / jobs / 534173396

Я запускаю тесты через скрипт bash, e2e.test.sh, который запускается 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"
}
...

Итак, как я могу убедиться, что код выхода огурца - тот, который возвращается, так что сборка завершается с ошибкой какэто когда тесты не проходят?

1 Ответ

2 голосов
/ 20 мая 2019

Есть несколько возможных способов решить эту проблему.Вот два моих любимых.

Вариант 1:

Добавьте set -e вверху вашего bash-скрипта, чтобы он выходил при первой ошибке, сохраняякод выхода и, следовательно, сбой Travis, если он не равен нулю.

Опция 2:

Захватывайте любой код выхода, который хотите, и выходите с ним, где бы это ни было целесообразно.

run whatever command here
exitcode=$?
[[ $exitcode == 0 ]] || exit $exitcode

В качестве дополнительного примечания - кажется, что ваш bash-скрипт имеет слишком много обязанностей.Я бы рассмотрел их разделение, если это возможно, а затем вы дадите Трэвису список команд для выполнения и, возможно, одну или две before_script команды.

Что-то вроде этого:

# .travis.yml
before_script:
- ./start_server.sh

script:
- npx cucumber-js spec/cucumber/features ...
...