有没有办法在 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 以某种方式支持这种类型的操作。
从 Cypress 6.2.0 开始,您可以监听before:run插件文件中的事件并在该事件处理程序中运行您想要的任何代码。每次cypress run执行时都会触发该事件。
*此功能目前处于实验阶段,需要将experimentalRunEvents配置选项设置为true.
before:run有关更多详细信息,请参阅API 文档: https://on.cypress.io/before-run-api
如果我是正确的,您需要一个全局设置脚本,该脚本在执行实际测试套件之前仅执行一次。目前,我认为赛普拉斯不存在这样的选择。
但是,我们可以通过解决方法来处理这个问题。另外,请注意,按顺序运行测试被认为是反模式(基于 - https://github.com/cypress-io/cypress/issues/390)。以下是要遵循的步骤,
cypress/support函数1_***.spec.js, 2_***.spec.js希望这可以帮助; 但这只是一个解决方法。