我正在 Cypress 中测试一个场景,但是当我在场景结束时比较两个数组时,代码失败了。 这是我有一个预定义数组的代码,我想创建第二个数组。代码在最后一行失败,说第二个数组是一个对象(我想不知何故我正在将数组与对象进行比较?):
cy.get(desiredCEXs).then( list => { cy.get(expectedCEXnames).should('have.all.members', list)})
我对赛普拉斯非常陌生。所以,我想知道如何修复代码?我想通过使用 .push() ,我正在构建第二个数组。这是我断言代码的链接https://www.coingecko.com/en/coins/kira-network
Then ('I assert what exchnages KIRA Network is listed on', ()=>
{
const desiredCEXs = [ 'Gate.io', 'AscendEX (BitMax)', 'Uniswap V2 (Ethereum)', 'Gate.io' ]
const expectedCEXnames = []
cy.get('tbody').eq(4).find('tr').as('exchanges')
cy.get('@exchanges').each( eachExchange =>
{
var exTypeText = eachExchange.children('td').eq(2).children('span').children('div').text().trim()
var exName = eachExchange.children('td').eq(1).children('div').children('a').children('div').text().trim()
if(exTypeText == 'CEX')
{
expectedCEXnames.push(exName)
}
})
.then( () =>
{
console.log(expectedCEXnames)
})
cy.get(desiredCEXs).then( list => { cy.get(expectedCEXnames).should('have.all.members', list)})
})
具体的操作方式取决于您是否需要排序检查以及存在性检查。
用于检查每个值是否存在(任何顺序)
const desiredCEXs = [ 'Gate.io',...]
cy.get('tbody').eq(4).find('tr').each(eachExchange => {
const exName = ...
if(exTypeText == 'CEX') {
const isInList = desiredCEXs.includes(exName)
assert(isInList, `${exName} is in the list`)
// or
expect(isInList).to.be.ok
// or
cy.wrap(exName).should('be.oneOf', desiredCEXs)
})
})
对于顺序检查以及存在性,请使用
deep.eq
检查两个数组
const desiredCEXs = [ 'Gate.io',...]
const actualCEXs = []
cy.get('tbody').eq(4).find('tr').each(eachExchange => {
const exName = ...
if(exTypeText == 'CEX') {
actualCEXs.push(exName)
})
})
.then(() => {
cy.wrap(actualCEXs)).should('deep.eq', desiredCEXs) // note "deep" for array check
})