如何在 Cypress 中共享变量值

use*_*554 3 mocha.js node.js cypress

我正在学习使用Cypress。这时候我有几个spec文件,结构如下:

/cypress
  /integration
    /child-a
      list.spec.js
      item.spec.js
    /child-b
      list.spec.js
      item.spec.js
    index.spec.js
Run Code Online (Sandbox Code Playgroud)

当测试运行开始时,我想设置一个值,一次。该值来自 Web api。出于这个原因,我希望每一个测试之前设定值。我也不想为每个文件设置它。相反,我只想设置一次。然后我想在所有 spec.js 文件中运行的所有测试中使用该值。

有没有办法在赛普拉斯做到这一点?有点像 abeforeAllbeforeSession? 或者有其他推荐的方法吗?我看到的最接近的是[before][2]钩子。谢谢你。

Sea*_*ean 8

我有一个类似的问题,但我希望该变量是动态的。例如,我希望我创建的测试用户在其电子邮件中包含一个日期,例如 test+1575177520@example.com。

要做到这一点并在所有测试中重新使用它,我想使用以下代码,但由于 JSON 不可执行,因此无法使用夹具:

test+${new Date().getTime()}@example.com
Run Code Online (Sandbox Code Playgroud)

我发现cypress/support/index.html有用(但我认为您也可以在规范中初始化变量)。通过将以下行添加到文件中,我能够在测试中的任何地方重用该动态变量,并且它对于每次 cypress 运行都是唯一的。

// support/index.js
//...

Cypress.config('email', `test+${new Date().getTime()}@example.com`)
Run Code Online (Sandbox Code Playgroud)

然后在我的测试中

Cypress.config('email')
Run Code Online (Sandbox Code Playgroud)