【问题标题】:How to assert JavaScript Object in Cypress?如何在 Cypress 中断言 JavaScript 对象?
【发布时间】:2020-09-09 05:31:06
【问题描述】:

我正在尝试获取跨度标记的文本并将其更改为数字,然后在此数字上使用断言 这是我的command.js 文件:

function num(){
  // this is the span text "Published August 27th, 2020"
  cy.get("span_text").then(function($el){
    var actualText = $el.text() 
    var split = actualText.split(" ")
    var year = split[split.length - 1];
    var x =  parseInt(year)
    return cy.wrap(x); // 2020
  })
}

Cypress.Commands.add('year', num)

这就是我在测试文件中调用它的方式,然后使用断言:

// test.js
const newProject = cy.year().then((value) => value
     console.log(value) // 2020 -> OK
);

console.log(newProject) // [Object] here is my question, why is an Object in here ??? I expect to be be a same as 2020

expect(newProject).to.be.greaterThan(2019) // expected [object Object] to be a number or a date

但我在赛普拉斯日志中收到此错误消息:

expected [object Object] to be a number or a date

我发现我不能断言对象而不是数字。但我不知道如何用另一个数字断言这个对象的返回值。谁能帮助我,让我知道我的测试出了什么问题,我该如何解决?

【问题讨论】:

    标签: javascript node.js automation cypress


    【解决方案1】:

    在此代码 sn-p 中,您将 Promise 分配给 newObject。 Promise 本质上是您正在执行的任何异步命令的“跟踪器”(在这种情况下为year())。不幸的是,仅从 then 返回值不会将其分配给 newObject

    有两种方法可以获得您期望的值:

    1. 将您的断言移入“then”:
    cy.year().then((value) =>
         expect(value).to.be.greaterThan(2019)
    );
    
    
    1. 使用async/await:
    const assertYear = async () => {
        const newProject = await cy.year();
        expect(newProject).to.be.greaterThan(2019);
    };
    
    assertYear();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 2019-11-09
      • 2019-09-14
      • 2016-10-17
      • 2019-07-09
      • 2021-05-31
      相关资源
      最近更新 更多