使用 Cypress 在表中进行断言排序

use*_*554 1 javascript jquery node.js cypress

好吧,我有一个包含许多行和列的表,我想检查该表是否针对特定列进行了排序。

我尝试使用不同的期望和断言,但它总是返回true. 我在这里做错了什么吗?

cy.get('table tbody tr').should(function($trs) {
  var arrayOftd = $trs.map(function (i, tr) {
    return Cypress.$(tr).find('td').eq(3).text() 
  })
  var test = arrayOftd.sort()          
  expect(arrayOftd).to.deep.equal.(test)
})
Run Code Online (Sandbox Code Playgroud)

它必须true在升序和false降序或任何其他顺序排序时返回。

这是 assert 语句的控制台日志

命令:assert cypress_runner.js:172385 实际:(13) ["946", "947", "948", "951", "952", "955", "956", "959", "960", "963", "964", "967", "968"] cypress_runner.js:172385 预期:(13) ["946", "947", "948", "951", "952", "955" , "956", "959", "960", "963", "964", "967", "968"] cypress_runner.js:172385 消息:预期 [Array(13)] 等于 [Array(13) ] cypress_runner.js:172385 错误:AssertionError:预期 [Array(13)] 等于 [Array(13)]

小智 5

这可能是个人偏好,但如果我真的不需要,我尽量不使用 jQuery 语法,以提高可读性。我所做的是:

function getCellTextAsArray() {
  let cellContents = [];
  return new Cypress.Promise(resolve => {
    cy.get("table tbody tr")
      .children()
      .each(($el, $index) => {
        //some logic to select the elements you want
        //like $index % 4 == 0
        if (...) {
          cellContents.push($el.text());
        }
      })
      .then(() => resolve(cellContents));
  });
}
Run Code Online (Sandbox Code Playgroud)

然后你做你的断言而不必担心传递回调:

getCellTextAsArray().then(cellContents => {
  let actual = cellContents.slice();
  cy.wrap(actual).should("deep.eq", cellContents.sort());
});
Run Code Online (Sandbox Code Playgroud)

所以这里发生的事情是我们正在尝试使用更高级别的 Cypress 命令来获取所有 tds,当我们完成它们时,我们使用 tds 文本内容解析 Promise,然后进行最终断言是一种简单易读的方式.