【问题标题】:Cypress negative assertion jumps to next it()Cypress 否定断言跳转到下一个 it()
【发布时间】:2022-06-10 22:34:06
【问题描述】:

我在描述测试套件中有三个 it() 块。在第一个中,我从下拉列表中选择给定值,然后在接下来的两个 it() 块中,我想评估是否根据我选择的值正确预填充了某些字段。

除了正确的断言之外,我还想要一些否定的断言(不必为空的字段)。但是,当 Cypress 检测到否定测试(第 69 行)时,它会跳转到下一个 it() 块,而不是从 it() 读取剩余的断言(参见第 72 行)。

所以在第 69 行的否定断言之后,永远不会到达第 72 行,而是执行下一个 it() 块。

我想让它也能到达第 72 行的代码。

【问题讨论】:

  • 将您尝试的代码添加到问题中,并提及生成错误的行。

标签: testing cypress assertion


【解决方案1】:

这是赛普拉斯测试的标准行为,只要断言失败,当前测试(即当前的it() 块)就会终止。

您可以将下一部分拆分为另一个测试,或使用软断言(但这些不是赛普拉斯内置的)。

另一种方法是不使用 expect(val).to.not.be.empty 内联,而是将所有断言保存到测试结束(即 Arrange/Act/Assert 模式)。

也许

cy.wrap(frame).find("#email").invoke('val').as('email')
cy.wrap(frame).find("#phoneNumber").invoke('val').as('phoneNumber')
...
cy.get('@email').then(email => {
 cy.get('@phoneNumber').then(phoneNumber => {
   const emailNotEmpty = email !== ''
   const phoneNumberNotEmpty = phoneNumber !== ''
   expect(emailNotEmpty && phoneNumberNotEmpty).to.eq(true)
 })
})

另外.invoke('attr', 'value') 可能不会为您提供输入的当前值,而只是在页面加载时设置的值。

对于当前值,您要调用val() 方法。

【讨论】:

  • 好的,我会尝试实施您的建议。非常感谢您的宝贵时间!
  • 它适用于您的示例!谢谢。另外,我从以下位置找到了一个有用的解决方法:github.com/alfonso-presa/soft-assert
【解决方案2】:

使用否定断言时要小心。您只是在检查许多不正确的可能性。这是一个example 对具有空字符串的元素的更好断言。

电子邮件的值似乎已经为空。也许您抓取文本会更好并断言长度大于 0 或使用正则表达式匹配,因为预期的文本将是电子邮件格式。

// assert text length
.invoke('text')
.then((text) => expect(text.length).to.be.gt(0))

// regex matching can be as simple as
.invoke('text')
.should('match', /(\w+)@(\w+).(\w+)/)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 2014-04-01
    • 2021-03-02
    相关资源
    最近更新 更多