断言使用cypressIO将元素按字母顺序排序时的最佳实践是什么?
我想基本上检查一下element[0].text()
之前是否正确排序了element[1].text()
,但对于下面的摘录中的所有元素来说,都是如此:
cy.get('#main div').each((account) => {
});
});
答案 0 :(得分:2)
适用于 Cypress 7.x 的解决方案
cy.get('#main div').then($elements => {
const strings = [...$elements].map(el => el.innerText)
expect(strings).to.deep.equal([...strings].sort())
})
推理:
.map
与普通 JS .map
的工作方式不同,因为它采用不同顺序的参数(index, el
而不是 el, index
)并且不返回纯数组,这是未来排序所需要的。这就是为什么将 jQuery 元素列表扩展为纯数组的原因。Array.sort()
就地工作,所以排序前需要克隆数组,否则会比较相同的数据。expects
和 deep.equal
的 Chai 语法。答案 1 :(得分:0)
我认为这或类似的方法将为您工作(没有尝试过)。它会获取与您提供的选择器匹配的所有元素的文本,并将其存储在数组中,然后断言该数组在排序之前和之后都匹配。
cy.get('#main div').then($elements => {
var strings = $elements.map($el => $el.text());
cy.wrap(strings).should("equal", strings.sort()); // you may need deep equal here instead
});