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

Testing Cypress:如何在所有测试开始之前运行一次代码,testing,cypress,Testing,Cypress,有没有办法在Cypress中的所有测试之前执行一次代码? 我需要它只运行一次之前,所有规格。 我想解决的问题是创建一些测试所需的文件,准备用户权限等等 我在supportindex.js文件中尝试了“before”钩子,但它运行每个测试规范 我还尝试基于在cypress.json文件中设置的env变量在index.js中运行条件“before”钩子,如下所示: "env": { "cypress_setup": false }, 我正在更改挂钩中的变量: before(func

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

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

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

  "env": {
    "cypress_setup": false
  },
我正在更改挂钩中的变量:

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"')
  }
})
但似乎Cypress在每次测试之前都会设置原始的env变量值


我希望Cypress在某种程度上支持这种类型的操作。

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

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

  • 将设置脚本作为一项功能放在
    cypress/support
  • 从测试中调用setup函数(Idea-将setup脚本作为 测试)
  • 我们需要先执行这个测试。到目前为止,还有 Cypress中测试的默认顺序;因此,将请求重命名 文件名为
    1.***.spec.js,2.***.spec.js

  • 希望这有帮助;不过,这只是一个解决办法。

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

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

    有关更多详细信息,请参阅
    before:run
    API文档: