【问题标题】:testing for alphabetical order with cypress用柏树测试字母顺序
【发布时间】:2021-10-05 18:31:23
【问题描述】:

我尝试编写一些代码来检查下拉菜单中选项的字母顺序。 所以我要做的是遍历下拉菜单并将选项的值添加到数组中。然后我想检查数组的值是否按字母顺序排列。到目前为止,我有这个代码:

var optionsArray = []
cy.get('#filter1 option').each(($el, index) => {
    optionsArray[index] = $el.text()
})
expect(optionsArray).to.equal(optionsArray.sort())

HTML:

<select id="filter1" class="form-control abc">
<option value="" selected="selected">text1</option>
<option value="text2">text2</option>
<option value="text3">text3</option><!----></select>

问题是它在不应该的时候通过了测试。控制台中出现以下内容:expected [] to equal [] 并且 expect() 命令似乎在任何其他应该运行的命令之前运行。

如何按字母顺序对数组中的值进行排序并比较选项是否相等?

编辑: 这是有效的新代码:

        var optionsArray = []
        var optionsArraySorted = []
        cy.get('#filter1 option').each(($el, index) => {
            optionsArray.push($el.text())
            optionsArraySorted.push($el.text())
        })
        .then(() => {
            expect(optionsArray).to.deep.equal(optionsArraySorted.sort())
        })

【问题讨论】:

    标签: cypress


    【解决方案1】:

    由于赛普拉斯命令的异步特性,您必须在.each() 之后添加.then() 才能工作。

    试试这个

    var optionsArray = []
    cy.get('#filter1 option').each(($el, index) => {
        optionsArray[index] = $el.text()
    })
    .then(() => {
      expect(optionsArray).to.deep.equal(optionsArray.sort())  // note deep for arrays
    })
    

    【讨论】:

    • 感谢您对添加.then()的解释。我意识到.sort() 也更改了数组,因此它会将其与自身进行比较 - 测试的错误通过:) 所以我稍微更改了代码。请参阅上面我的帖子的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多