在我的GitHub操作yaml文件中,我在末尾有两个命令。第一个是yarn start
(用于启动服务器(,第二个用于运行测试文件。
在本地服务器上,我通常运行yarn start
,然后等待前端和后端端口运行,然后只有我从另一个终端运行测试
但从GitHub操作来看,它运行yarn start
命令,然后立即运行测试脚本,所以当测试文件运行时,服务器没有在端口上侦听。这就是我的测试脚本失败的原因。如何确保测试脚本在yarn start
完成后运行?
这是我的action.yml
文件
name: "Github Actions Test"
on:
push:
branches:
- wip/checkout2
jobs:
test:
runs-on: ubuntu-latest
env:
PRISMA_ENDPOINT: ${{secrets.PRISMA_ENDPOINT}}
PRISMA_SECRET: ${{secrets.PRISMA_SECRET}}
steps:
- uses: actions/checkout@v1
- name: "Install Node"
uses: actions/setup-node@v1
with:
node-version: "12.x"
- name: "Install global packages"
run: npm install -g yarn prisma-cli concurrently mocha
- name: "Run docker Container"
run: docker-compose -f docker-compose.yml up --build -d
- name: "Install deps"
run: yarn install
- name: "prisma deploy"
run: yarn deploy:backend
- name: "Seed Backend"
run: yarn seed:backend
- name: "Build app"
run: yarn build
- name: "Start backend and frontend concurrently on background and run tests"
run: |
yarn start &
yarn test
另一个选项是等待
./node_modules/.bin/wait-on tcp:3000
您需要执行以下操作之一:
选项1:运行测试前等待几秒钟:
run: |
yarn start &
sleep 10
yarn test
选项2:等待端口打开,并使用为此目的设计的一些实用程序。也许等待端口(未测试(
选项3:使用本地linux工具等待端口打开——示例1,示例2。
与@DannyB的建议类似,您可以等待几秒钟,然后使用curl
测试网络连接,以测试服务器是否在后台正常运行。
例如:
- name: "Start backend and frontend concurrently on background and run tests"
run: |
yarn start &
sleep 10 &&
curl http://localhost:8000 &&
yarn test
通过这种方式,您可以检查工作流作业的日志,并在执行测试之前确认服务器已启动并正在运行。
如果建立了连接,默认情况下curl http://localhost:<PORT>
将返回网页的内容。您也可以在命令末尾添加一个-I
,以确保只返回请求标头,并检查它是否具有HTTP/1.0 200 OK
状态。