首页 > 解决方案 > 赛普拉斯:如何在测试的所有测试开始之前运行一次代码

问题描述

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

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

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

  "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"')
  }
})

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

我希望赛普拉斯以某种方式支持这种类型的行动。

标签: testingcypress

解决方案


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

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

  1. 将安装脚本cypress/support作为函数
  2. 从您的测试中调用设置函数(想法 - 运行设置脚本作为测试)
  3. 我们需要先执行这个测试。截至目前,赛普拉斯现在有默认的测试顺序;因此,将请求将文件重命名为1_***.spec.js, 2_***.spec.js

希望这可以帮助; 不过,这只是一种解决方法。


推荐阅读