在cypress.env.json中定义变量

6
我想为所选应用程序的测试定义全局变量。 我想将它们输入一个文件中 - 在阅读文档后,我决定使用 cypress.env.json

https://docs.cypress.io/guides/guides/environment-variables.html#Option-1-cypress-json

我发现变量已经被正确导入,但在测试过程中,我遇到了以下错误:

"TypeError: Cannot read property 'env' of undefined"

有关如何解决这个问题的建议?

https://i.imgur.com/uEVg24I.png

测试文件:
describe('/register', () => {
    beforeEach(() => {
        cy.visit('/#/register')
    })

    it.only('requires username', () => {
        cy.get('input[type="email"]').Cypress.env('correctEmail')
        cy.get('input[type="password"]').Cypress.env('correctPassword')
        cy.get('button').contains('Sign in').click()
        cy.get('.error-messages').should('contain', 'username can\'t be blankis too short (minimum is 1 character)')
    })

cypress.env.json:

{
    "correctName": "Bob Ross",
    "incorrectName": "Bobbbbb",
    "correctEmail": "bob@ross.eu",
    "incorrectEmail": "b@bbb",
    "correctPassword": "bobrosss",
    "incorrectPassword": "Oooooo" 
}
2个回答

12
回答你最初的问题,cypress.env.json文件需要放置在你的项目根目录中,并与cypress.json文件相邻。
通过创建单独的cypress.env.json文件,您可以访问嵌套值,例如:
//cypress.env.js
{
    "user": {
        "username": "Jane",
        "password": "SuperPassword",
        "someOtherData": "veryImportantData"
    }
}

然后

//somewhere in myCypressTest.spec.ts
Cypress.env("user").username      //returns "Jane"
Cypress.env("user").password      //returns "SuperPassword"
Cypress.env("user").someOtherData //returns "veryImportantData"

很不幸地,这个问题没有被准确记录在任何地方。我没有需要更改任何路径,只是将 cypress.env.json 文件移出原本放置的Cypress文件夹,然后它就开始运作了。


这对我不起作用。我得到了“无法读取未定义的属性'signals'”。 - Steve Tomlin
@SteveTomlin,你能给我展示一下你的cypress.env.json文件吗? - jSun
没关系,我发现它出错的原因是因为我在顶部导入了Cypress。我删除了导入,现在它可以工作了。 - Steve Tomlin
@SteveTomlin 超棒的 :) - jSun

3
将您的`env`变量放入位于根目录中的`cypress.json`文件中,如下所示:
     {
       "env": {
         "correctName": "Bob Ross",
         "incorrectName": "Bobbbbb",
         "correctEmail": "bob@ross.eu",
         "incorrectEmail": "b@bbb",
         "correctPassword": "bobrosss",
         "incorrectPassword": "Oooooo" 
       },
     }


此外,我在您的代码中还发现了一个问题。如果您想要输入内容到输入框中,您需要使用 .type 命令,像这样:
cy.get('input[type="email"]').type(Cypress.env('correctEmail'));

已经尝试过了 - 结果相同。我将cypress.env.json移动到另一个文件夹中,因为我在设置中检查到Cypress正确地从cypress.json中找到了变量,但问题仍然存在。 - Piecho3a
谢谢 - 所以问题出在代码上,而不是导入。:) - Piecho3a
1
@Piecho3a,你没有导入什么?我也遇到了同样的问题。 - fingia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接