需要了解配置react和柏树的最佳方式



我只是有一个问题,关于在运行Cyprus测试时启动react应用程序的最佳方法。现在,按照它的设置方式,我需要启动我的服务器,然后运行柏树测试。我想要一个单独的命令来启动react应用程序->运行Cypress测试。

我是新的反应和柏树

我的包.json看起来像这个

"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "cypress run",
"eject": "react-scripts eject"
},

目前我需要运行npm启动然后在另一个窗口npm测试

我试着在一行中开始并运行测试,但我无法让它发挥作用。它只是启动了react应用程序,并没有做任何其他事情。

我最近写了这篇文章,作为JS中TDD系列的一部分,你可以在我的博客上阅读全文。


首先,安装一些有用的助手依赖项:

$ npm install concurrently cross-env wait-on

然后向package.json:添加一些额外的脚本

"e2e:ci": "concurrently -k -s first "npm:e2e:ci:*"",
"e2e:ci:app": "cross-env BROWSER=none PORT=4321 npm start",
"pree2e:ci:run": "wait-on -t 30000 http-get://localhost:4321",
"e2e:ci:run": "cross-env CYPRESS_BASE_URL=http://localhost:4321 npm run e2e",

那这有什么用呢?当我们运行npm run e2e:ci时,concurrently脚本将并行运行两件事:

  • e2e:ci:app:使用npm start运行应用程序,并通过cross-env设置一些环境变量(这允许它在*nix和Windows上工作(:
    • BROWSER=none阻止浏览器弹出并占据屏幕[这是文章使用的CRA创建的React应用程序的默认行为];以及
    • PORT=4321在指定的端口上运行应用程序(因此我们仍然可以在端口3000上运行一个版本,而不会引起任何冲突(
  • e2e:ci:run:分两步运行E2E测试:
    • pre脚本首先运行,并使用wait-on等待30000ms,以便应用程序在指定端口上运行;那么
    • 如果有效(即应用程序在30秒内启动(,则运行实际测试,并覆盖baseUrl配置以指向正确的位置

传递给concurrently本身的其他配置选项有:

  • -k,意味着当一个进程退出时停止所有其他进程(在这种情况下,我们希望我们的测试在某个时候退出,并希望在它们退出时停止应用程序(;以及
  • -s first,意味着整个命令的输出是第一个退出的命令的输出(即e2e:ci命令的输出应该是测试的输出(

基于jonrsharpe的回答,我还需要启动我的(golang,尽管实现语言并不重要(api服务器,并且我正在通过wdio运行测试。它使用了与他的答案相同的工具集,但有一个额外的步骤:

"e2e:ci": "concurrently -k -s first "npm:e2e:ci:*"",
"e2e:ci:server": "cross-env SERVER_PORT=40001 ./launchServer.sh",
"pree2e:ci:app": "wait-on -t30000 http-get://localhost:40001/state",
"e2e:ci:app": "cross-env BROWSER=none PORT=40002 npm start",
"pree2e:ci:run": "wait-on -t 30000 http-get://localhost:40002",
"e2e:ci:run": "npx wdio run ./wdio.conf.js --baseUrl http://localhost:40002"

两个额外的脚本是:

  • e2e:ci:server,运行脚本启动服务器
  • pree2e:ci:app只是等待服务器运行。请注意,它不仅仅是在等待"/"——我的api服务器404处理根请求,并且wait-on需要获得2xx响应,因此http-get-url需要是有效的api端点("/state"(

还值得注意的是,wdio只是使用了一个额外的命令行参数来设置基本url,而不是原始柏树解决方案中的env-var。

最新更新