在Travis上为Create React App运行Puppeteer测试:如何同时执行npm start与test?
解决Travis中同时执行npm start和npm test的构建失败问题
我太懂这个困扰了——想在Travis里启动服务器跑Puppeteer测试,结果npm start总以状态1退出导致构建失败,这事儿的核心原因其实很好捋清楚:
问题根源
你当前的配置里,npm start是在前台运行的,Travis会死死等着这个命令执行完毕,才会去跑npm test。但正常情况下,启动服务器的命令是不会主动退出的,它会一直挂着提供服务;可如果服务器启动失败(比如端口被占、代码报错、依赖缺漏),npm start就会直接退出并返回状态1,自然触发构建失败。就算服务器能启动成功,Travis也会一直卡着等它结束,永远跑不到测试步骤。
正确的配置方案
我们需要把服务器放到后台运行,并且等服务器真正启动就绪后再执行测试,这样测试才能正常连接到服务器。具体操作分两步:
- 先安装一个叫
wait-on的工具,它能帮我们精准等待服务器启动完成:
npm install --save-dev wait-on
- 修改你的
.travis.yml配置:
language: node_js node_js: - "8" cache: directories: - "node_modules" install: - npm install script: - npm start & # 用&把服务器进程放到后台运行,不阻塞后续命令 - wait-on http://localhost:3000 # 等待服务器就绪,这里的端口改成你实际使用的端口 - npm test
额外提醒
- 如果你服务器的端口不是3000,一定要把
wait-on后面的URL改成对应端口,比如http://localhost:8080。 - 如果还是启动失败,去Travis的构建日志里查看
npm start的输出内容,里面会有服务器启动失败的具体原因(比如代码语法错、端口冲突),针对性排查就能解决。
内容的提问来源于stack exchange,提问作者Josh Pittman
相关产品推荐
相关产品推荐

