在GitLab持续集成中运行ReactJS应用程序并使用Jest + Puppeteer进行测试

107次阅读
没有评论

问题描述

在GitLab持续集成中遇到了问题。他正在努力让端到端测试在GitLab的流水线中正常运行。尽管在本地运行所有测试都没有问题,但在使用GitLab的持续集成功能时遇到了一些问题。

在本地运行测试时,Puppeteer会使用无头版本的Chrome进行端到端测试,但是ReactJS的Create React App(CRA)服务器必须在运行时才能正常工作。为了在本地运行CRA服务器,用户会在一个终端中运行npm start,一旦它完全运行,就会在另一个终端中运行npm test。在测试期间,Puppeteer使用无头Chromium运行端到端测试。

问题在于,npm start会启动CRA服务器,但是这个进程不会停止,用户不知道如何在不手动退出的情况下停止它。这会导致Docker挂起,并阻止他启动测试。

解决方案

最佳解决方案:使用jest-puppeteer库启动本地Web服务器

用户可以通过使用jest-puppeteer库来解决这个问题,该库允许您在测试期间启动一个本地Web服务器。

步骤

  1. 首先,安装jest-puppeteer库:

npm install --save-dev jest-puppeteer puppeteer

  1. 创建一个名为jest-puppeteer.config.js的配置文件,并配置launchserver部分。以下是一个示例配置:

javascript
module.exports = {
launch: {
headless: true,
},
server: {
command: 'npm start', // 运行CRA服务器的命令
},
};

  1. .gitlab-ci.yml中更新测试阶段的脚本:

“`yaml
stages:
– test

test:
stage: test
script:
– npm run test:ci-deps
– npm run test:e2e # 运行Jest + Puppeteer测试
“`

通过使用jest-puppeteer库,您可以在测试期间启动本地Web服务器,并确保在测试完成后关闭它。

其他解决方案:手动编写启动脚本

如果您希望采取其他方法,您可以手动编写脚本来控制应用程序的启动和关闭顺序。

步骤

  1. 编写一个启动脚本,例如start-and-test.sh

bash
#!/bin/bash
npm start & # 在后台启动CRA服务器
CRA_PID=$! # 获取CRA服务器进程ID
sleep 10 # 等待足够的时间,确保CRA服务器完全启动
npm run test:e2e # 运行端到端测试
kill $CRA_PID # 关闭CRA服务器

  1. 更新.gitlab-ci.yml中的测试阶段的脚本:

“`yaml
stages:
– test

test:
stage: test
script:
– chmod +x start-and-test.sh # 赋予脚本执行权限
– ./start-and-test.sh # 运行启动脚本
“`

使用这种方法,您可以手动控制应用程序的启动和关闭顺序,并在测试完成后关闭CRA服务器。

请注意,两种方法都可以解决问题,您可以根据您的偏好和需求选择其中一种方法。

请注意以上操作可能涉及版本差异或涉及操作风险,具体操作前请做好备份并在非生产环境中进行测试。


这些解决方案将帮助您在GitLab持续集成中运行ReactJS应用程序并使用Jest + Puppeteer进行端到端测试。通过选择其中一种方法,您将能够在测试完成后成功关闭CRA服务器,并在持续集成流水线中顺利运行测试。

正文完