Шаблон, который я использую, выглядит следующим образом (хотя я пытаюсь его улучшить),
it('should update last refreshed text', () => {
cy.contains('selector-closest-to-text', 'signature text')
.then(els => {
const before = els[0].textContent; // #1 parse the text
expect(before.length).to.be.above(0); // #2 in case text is empty
cy.wait(1000) // #3 wait a second for new timestamp
cy.get('selector-for-refresh-trigger')... // #4 do something to refresh
cy.contains('selector-closest-to-text', 'signature text')
.should('not.contain', before) // #5 check has actually changed
.then(els=> {
const after = els[0].textContent; // #6 parse again
expect(after.length).to.be.above(0); // #7 in case empty
expect(before).not.to.eq(after); // #8 compare
})
});
});
Примечания:
# 1 - разбор текста
В вашем случае немного сложно получить только дату и время. Вы можете просто использовать textcontent
, как я, если вы не собираетесь проверять, что другой пользователь обновил расписание, но если вам просто нужны дата и время, это выражение может сделать это
const before = els[0].textcontent.split(' ').slice(2).join(' ')
Возможно, вы захотите извлечь больше, чем просто время обновления, если это так, создайте простую функцию JS за пределами it()
const parseText = (txt) => {
const split = txt.split(' ')
return {
user: split.slice(0,1),
role: split.slice(1,1),
timeRefreshed: split.slice(2).join(' '),
}
}
и используйте его вот так
const user = parseText(els[0].textcontent).user
const role = parseText(els[0].textcontent).role
const before = parseText(els[0].textcontent).timeRefreshed
# 3 - в ожидании обновления
Это немного грубо, но просто. Может быть улучшено ожиданием изменения текста, should('not.contain', before)
может быть достаточно.
Примечание cy.clock()
, вероятно, не будет работать здесь.
# 4 - запуск обновления
У меня есть кнопка, которую нужно нажать, но может потребоваться ввести текст, возможно, на другой странице, в этом случае этот шаг будет состоять из нескольких строк.