Cypress:如何在所有测试开始之前运行一次代码

kap*_*kat 5 testing cypress

有没有办法在 Cypress 中的所有测试之前执行一次代码?我需要它在所有规格之前只运行一次。我要解决的问题是创建一些测试所需的文件,准备用户权限等。

我在支持 index.js 文件中尝试了“before”钩子,但它运行每个测试规范。

我还尝试根据我在 cypress.json 文件中设置的 env 变量在 index.js 中运行条件“before”钩子,如下所示:

  "env": {
    "cypress_setup": false
  },
Run Code Online (Sandbox Code Playgroud)

我正在更改钩子中的变量:

before(function () {
  // Set user permissions
  if (Cypress.env('cypress_admin') === false) {
    // do some stuff
    cy.log('o some stuff')
    // Change the variable to mark the hook as executed
    cy.exec('export cypress_admin="true"')
  }
})
Run Code Online (Sandbox Code Playgroud)

但似乎赛普拉斯在每次测试之前设置了原始 env 变量值。

我希望 Cypress 以某种方式支持这种类型的操作。

Jen*_*ane 5

从 Cypress 6.2.0 开始,您可以监听before:run插件文件中的事件并在该事件处理程序中运行您想要的任何代码。每次cypress run执行时都会触发该事件。

*此功能目前处于实验阶段,需要将experimentalRunEvents配置选项设置为true.

before:run有关更多详细信息,请参阅API 文档: https://on.cypress.io/before-run-api


Kon*_*man 4

如果我是正确的,您需要一个全局设置脚本,该脚本在执行实际测试套件之前仅执行一次。目前,我认为赛普拉斯不存在这样的选择。

但是,我们可以通过解决方法来处理这个问题。另外,请注意,按顺序运行测试被认为是反模式(基于 - https://github.com/cypress-io/cypress/issues/390)。以下是要遵循的步骤,

  1. 将设置脚本作为cypress/support函数
  2. 从测试中调用设置函数(想法 - 运行设置脚本作为测试)
  3. 我们需要首先执行这个测试。截至目前,Cypress 中的测试已默认排序;因此,会请求将文件重命名为1_***.spec.js, 2_***.spec.js

希望这可以帮助; 但这只是一个解决方法。