#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()
также изменяет массив, чтобы он сравнивал его с самим собой — ложное прохождение теста 🙂 Поэтому я немного изменил код. Смотрите правку моего поста выше.