testing - 赛普拉斯:如何在测试的所有测试开始之前运行一次代码
问题描述
有没有办法在赛普拉斯的所有测试之前执行一次代码?我需要它在所有规格之前只运行一次。我要解决的问题是创建一些测试所需的文件,准备用户权限等。
我在支持 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"')
}
})
但似乎赛普拉斯在每次测试之前都设置了原始环境变量值。
我希望赛普拉斯以某种方式支持这种类型的行动。
解决方案
如果我是正确的,您需要有一个全局设置脚本,该脚本在执行您的实际测试套件之前只执行一次。目前,我认为赛普拉斯不存在这样的选择。
但是,我们可以通过解决方法来处理这个问题。另外,请注意,按顺序运行测试被认为是反模式(基于 - https://github.com/cypress-io/cypress/issues/390)。以下是要遵循的步骤,
- 将安装脚本
cypress/support
作为函数 - 从您的测试中调用设置函数(想法 - 运行设置脚本作为测试)
- 我们需要先执行这个测试。截至目前,赛普拉斯现在有默认的测试顺序;因此,将请求将文件重命名为
1_***.spec.js, 2_***.spec.js
希望这可以帮助; 不过,这只是一种解决方法。
推荐阅读
- javascript - 从另一个组件访问时,reactjs 中的注销功能不起作用
- facebook - 从 Facebook 页面的 Graph API 获取外部 URL
- laravel - 如何通过控制器在 laravel 中使用 Binance api
- python - Python:如何使用 Snscrap 遍历 Twitter 用户列表?
- laravel - 身份验证用户时区中的 Laravel WhereDate 过滤器
- gmail-api - 使用 Gmail API,是否可以获得不受过滤器更改的邮件标签?
- express - NestJS API cookie 不适用于 Heroku
- javascript - 生成图的每种拓扑类型
- c# - Angular 11 从前端编辑数据库表
- flutter - 在颤动中居中一列容器,crossAxis不起作用