【问题标题】:How to let Cypress return custom errors or messages如何让赛普拉斯返回自定义错误或消息
【发布时间】:2019-02-18 13:58:03
【问题描述】:

我正在寻找一种方法来创建自定义消息而不是标准消息。我有的是这段代码(有点乱):

Cypress.Commands.add('authenticate', {prevSubject: 'optional'}, (_, fixture) => {
  return cy.fixture(fixture).then(credentials => {
    cy
      .apiRequest('scrambled/url/here', {
        method: 'post',
        authorizationMethod: 'Basic',
        token: apiOauthSecret,
        data: credentials
      })
      .then(resp => {
        expect(resp.status)
          .to
          .eq(201, 'Unable to authenticate, login failed')
        storeTokenInSession(resp.body)
      })
  })
})

该代码会导致如下错误: https://i.stack.imgur.com/l2j4o.png

如果我修复代码以使结果正常,结果如下所示: https://i.stack.imgur.com/Pr1iA.png

如您所见,如果 eq() 失败而不是 eq() 成功时应该显示消息。

我只想在检查失败时显示消息,但我也希望测试中断并停止。

你们知道如何让它工作吗?我已经研究过使用 cy.log() 和此处显示的解决方案。

【问题讨论】:

    标签: javascript cypress


    【解决方案1】:

    您可以为此使用Cypress.log

    if (resp.status !== 201) {
      Cypress.log({
        name: 'Authentication',
        message: 'failed'
      })
    }
    expect(resp).its('status').eq(201)
    

    【讨论】:

    • 这与我得到的 .eq(201, 'Unable to authenticate, login failed') 结果相同。该消息仅在测试没有中断时显示,但我希望它反过来:仅在断言失败时显示消息。
    • 好吧,我把逻辑倒过来了
    • 猜我不够清楚。我认为颠倒逻辑会起作用。但是我的问题是测试继续运行。所以我想要的是: 1. 测试失败 2. “这是自定义错误” 3. 测试没有继续 我用给定的解决方案得到的是: 1. 测试失败 2. 显示自定义错误” 3.测试继续,不会中断。
    • 是的,所以您只需在之后添加您的断言
    • 啊,我本来可以这么想的……但它确实有效!感谢支持
    【解决方案2】:

    不需要Cypress.log()

    if (resp.status !== 201) {
      expect(resp.status, 'Unable to authenticate, login failed').to.eq(201)
    }
    

    如果它很好,它会继续前进。否则它会失败并显示错误消息。

    这样做的一个好处是您不会收到灰色错误消息,而是会看到红色。

    如果您也想要成功案例,只需添加:

    else {
      expect(resp.status, 'Able to authenticate, login succeeded').to.eq(201)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2023-01-30
      相关资源
      最近更新 更多