如何解决AWS CodePipeline中react-scripts test执行挂起问题
根因说明
Create React App 脚手架默认执行npm test时会启动watch交互监听模式:测试执行完成后不会自动退出进程,会持续监听文件变化等待重新触发测试。在无交互输入的CodeBuild运行环境中,进程会一直挂起等待,永远不会执行后续的构建命令,和测试用例本身是否通过无关。
修复方案
需要调整test命令的运行模式,让它在CI环境下单次执行完所有测试就自动退出:如果测试用例失败,直接返回非0状态码中断构建流程,测试通过才继续执行后续build步骤,刚好匹配卡点需求。
方案1:追加命令参数关闭监听
直接给test命令追加--watchAll=false参数,强制单次运行所有测试后退出,修改后的buildspec.yml如下:
version: 0.2 phases: install: commands: - cd react/menu && npm install build: commands: - npm test -- --watchAll=false - npm run build artifacts: files: "**/*" base-directory: "react/menu/build"
方案2:注入CI环境变量(推荐)
Create React App 会自动识别CI=true的环境变量,检测到在CI环境运行时,会自动关闭测试监听模式、禁用交互式提示,同时构建阶段会自动开启更严格的代码校验,更适配流水线场景。配置方式如下:
version: 0.2 env: variables: CI: "true" phases: install: commands: - cd react/menu && npm install build: commands: - npm test - npm run build artifacts: files: "**/*" base-directory: "react/menu/build"
两种配置都可以实现预期效果:测试失败时流水线直接终止,不会执行后续构建步骤;测试全部通过才会继续打包产物。
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

