【问题标题】:Cypress | Chai assertions executes outside if else condition. Assertions are mentioned inside if condition柏树 | Chai 断言在 if else 条件之外执行。 if 条件里面提到了断言
【发布时间】:2021-10-29 14:58:33
【问题描述】:

我正在编写一个 cypress 自定义命令,该命令从 API 端点获取 json 响应。我正在对 json 响应写一些断言。但是,我有一个 if-else 条件要执行。见下文。

cy.getReportJson('84b636f4-c8f0-4aa4-bdeb-15abf811d432',user).then(report=> {
                    
                    if(services.request_criminal_record_check.include){
                        console.log('inside if')
                        cy.wait(30000)
                        expect(report.report_summary.rcmp_result.status).equal(data.expected_result.rcmp_result.status)
                        expect(report.report_summary.rcmp_result.overall_score).equal(data.expected_result.rcmp_result.overall_score)
                        expect(report.report_summary.rcmp_result.result).equal(data.expected_result.rcmp_result.result)
                    }
                })

当我在规范文件中运行此代码时,我得到的输出如下。

如您所见,在触发等待命令之前,断言正在运行。 我想让 cypress 等待 30 秒,以便后端运行它的魔力并生成报告,30 秒后,我想在报告 json 上断言。 甚至 console.log 在断言执行后也会打印出来。

这与赛普拉斯的异步特性有关吗?

【问题讨论】:

  • 等待这么长的时间不是一个好习惯。您应该实现一些带有超时的东西,这样每当所需的活动完成时,它就会继续执行下一个命令。
  • @AlapanDas 我们在模拟响应中有一个人工诱导的延迟,以模拟现实世界报告生成的时间线。当您等待 DOM 元素做某事时,使用超时是正确的方法。但是,请详细说明我们如何使用超时来等待 API 响应,以返回特定值?

标签: if-statement cypress chai assertion


【解决方案1】:

您需要对断言进行排队。 expect()... 立即运行,但 cy.wait() 正在暂停队列执行。

cy.wait(30000)
cy.then(() => {                 
  expect(...).equal(...)
  expect(...).equal(...)
  expect(...).equal(...)
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-19
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多