тестирование на алфавитный порядок с помощью cypress

#cypress

Вопрос:

Я пытаюсь закодировать что-то, что будет проверять алфавитный порядок параметров в выпадающем меню. Итак, что я делаю, так это просматриваю раскрывающееся меню и добавляю значения параметров в массив. Затем я хочу проверить, расположены ли значения массива в алфавитном порядке. До сих пор у меня есть этот код:

 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>
 

Проблема в том, что он проходит тест, когда этого не должно быть. В консоли отображается следующее: ожидается, что [] будет равно []
И команда 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())
        })
 

Ответ №1:

Из-за асинхронного характера команд Cypress вам необходимо добавить .then() after .each() , чтобы это сработало.

Попробуй это

 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
})
 

Комментарии:

1. Спасибо за объяснение по поводу добавления .then() . Я понял, что .sort() также изменяет массив, чтобы он сравнивал его с самим собой — ложное прохождение теста 🙂 Поэтому я немного изменил код. Смотрите правку моего поста выше.