将 Cypress 与 NuxtJS 一起使用,并在开始 e2e 测试之前等待服务器启动

Use Cypress with NuxtJS and wait for server startup before starting e2e tests

我用 Cypress 建立了一个 NuxtJS 项目。 在我的测试中,我转到我的应用程序的页面之一,例如主页 (/)

describe('Index page', function () {
  it('should show index page of app', function () {
    cy.visit('/')
    cy.get('h1.title').contains('frontend')
  })
})

所以我需要启动我的开发服务器才能构建我的 Nuxt 应用程序 (Vue),然后启动我的 e2e 测试。

问题是当我启动它时(相当长,至少 15 秒),它没有给我控制权,进程仍然处于活动状态所以我无法启动我的 yarn 命令到 运行 测试。

"scripts": {
    "dev": "nuxt-ts",
    "build": "nuxt-ts build",
    "start": "nuxt-ts start",
    "generate": "nuxt-ts generate",
    "lint:js": "eslint --ext .js,.vue --ignore-path .gitignore .",
    "lint:style": "stylelint **/*.{vue,css} --ignore-path .gitignore",
    "lint": "yarn lint:js && yarn lint:style",
    "test": "jest",
    "e2e": "cypress open",
    "e2e:slient": "yarn run dev & cypress run"
  },

因此,一旦服务器正常启动,我真的不知道如何启动我的测试。

谢谢。

因为 NUXT 在准备测试之前生成应用程序需要时间。

所以你不应该使用"yarn 运行 dev & cypress 运行".

相反,您可以通过 start-server-and-test 尝试,这是 cypress 文档推荐的: https://docs.cypress.io/guides/continuous-integration/introduction#Boot-your-server

"scripts": {
   "dev": "nuxt-ts",
   "build": "nuxt-ts build",
   "start": "nuxt-ts start",
   "generate": "nuxt-ts generate",
   "lint:js": "eslint --ext .js,.vue --ignore-path .gitignore .",
   "lint:style": "stylelint **/*.{vue,css} --ignore-path .gitignore",
   "lint": "yarn lint:js && yarn lint:style",
   "test": "jest",
   "cypress:open": "cypress open",
   "cypress:run": "cypress run",
   "e2e": "start-server-and-test dev http://localhost:3000 cypress:open",
   "pree2e:slient": "npm run build",
   "e2e:silent": "start-server-and-test start http://localhost:3000 cypress:run"
 },
 "devDependencies": {
    .
    .
    .
    "start-server-and-test": "^1.11.5",
  }

添加“pree2e:slient”脚本的原因是强制 NUXT 在以静默模式开始 cypress 测试之前构建应用程序(您可能 运行 此脚本在 CI 管道上)

使用 pm2wait-on 包以获得更通用的解决方案

yarn pm2 start "yarn nuxt"
yarn wait-on http://localhost:3000
yarn cypress run
yarn pm2 kill

Pm2 允许多个应用程序 运行 在您的服务器上。将 yarn nuxt 命令发送到 pm2 运行s 您处于开发模式的应用程序。 wait-on 等待本地主机的响应以确保您的应用程序在开始测试之前得到服务。然后你 运行 cypress 正常。不要忘记在完成时杀死 pm2,否则您的应用程序将继续 运行.