有没有办法检查 cypress 测试中是否存在别名

问题描述 投票:0回答:2

我正在尝试解决问题,但尚未找到好的解决方案。

我的组织有一些测试,这些测试在运行时创建用户电子邮件,而在其他时候则不创建。创建用户电子邮件用于测试时,会为其分配一个别名

@userEmail
。我想在 after hook 中编写一个函数,无论是否创建/分配用户别名,该函数都会运行所有测试。

该函数基本上会检查

@userEmail
别名是否存在。如果它确实运行数据库查询来清除我们的用户,则不执行任何操作。

这就是在我们的

/cypress/support/actions/user-setup.js
文件中创建别名的方式

const setupEmail = function (alias) {
  cy.wrap(getEmail(alias)).as('userEmail');
};

这是我的

aftereach()
方法

afterEach(function () {
  
  cy.get('@userEmail').then((email) => {
    cy.dbQuery('clearSSNandPhoneNumber', email);
  });
});

现在这非常适合创建别名的测试。但是,如果测试未创建别名,则 afterEach 函数会使整个测试失败。

似乎这不是检查别名的建议方法。如何创建一个解决方案,在别名存在时运行数据库查询,在别名不存在时不执行任何操作?

mocha.js cypress alias
2个回答
5
投票

使用 cypress-if 将检查别名,如果别名不存在,则测试不会失败。

afterEach(() => {
  cy.get('@userEmail')
    .if()
    .log('Cleaning db')
    .dbQuery('clearSSNandPhoneNumber', email)
    .else()
    .log('No cleanup required')
})

如果您愿意,别名实际上可以在

cy.state()
中找到。

afterEach(() => {

  // with no aliases set up
  console.log(cy.state('aliases'))                               // undefined

  cy.wrap('email').as('userEmail').then(() => {
    expect(cy.state('aliases').userEmail).to.not.be.undefined    // passes
  })

  if (cy.state('aliases')?.userEmail) {                    // NB ?.userEmail
    cy.dbQuery('clearSSNandPhoneNumber', email)
  }
})

0
投票

我的使用是针对 cy.intercept() 调用创建的别名,但似乎效果很好。当然,我很高兴听到任何反馈,为什么这不是首选方法!

verify_api_NOT_called(alias: string) {
    cy.get(alias).then(value => {
      expect(value).to.be.null;
    });
  }
© www.soinside.com 2019 - 2024. All rights reserved.