Почему время кипариса истекает при оценке этого регулярного выражения? - PullRequest
0 голосов
/ 21 декабря 2018

Я новичок в Cypress и мне любопытно, что я делаю неправильно.

У меня есть тест, который проверяет содержимое таблицы на странице.Один из этих столбцов содержит отформатированную дату - дата может быть немного отключена, поэтому я использую регулярное выражение для ее проверки, а не для строгого сравнения.

Тест выглядит примерно так:

it.only('I can see the date',  ()=> {

    // Match dates like 'Dec. 21, 2018 at 1:12 pm'
    const approximateTime = new RegExp(Cypress.moment().format('MMM[\]. D, YYYY [at] h:[.. [a|p]m]'));

    cy.get('table.activity-log').within(() => {
        cy.get('tbody tr').eq(0).within(() => {
            cy.get('td').eq(0).invoke('text').should('match', approximateTime);
...

Я запускаю его для HTML, и он соответствует ожидаемому элементу, который выглядит примерно так:

<td>
    Dec. 21, 2018
    <span> at </span>
    1:12 pm
</td>

Тест выполняется и время ожидания при повторных попытках:

AssertionError: expected 'Dec. 21, 2018 at 1:12 pm' to match /Dec. 21, 2018 at 1:.. {a|p}m/

Я что-то не так делаю с .invoke('text') или в другом месте теста?

1 Ответ

0 голосов
/ 21 декабря 2018

Я понял - в примере есть две проблемы.

@ ug_ заметил одну проблему, moment.format() не очень хорошо рендерит буквенные квадратные скобки.Их предложение использовать группу захвата решило эту проблему:

До:
moment().format('MMM[\]. D, YYYY [at] h:[.. [a|p]m]')

После:
moment().format('MMM[\]. D, YYYY [at] h:[.. (a|p)m]')

Кроме того, я понял, чтоСоответствующая строка содержит два &nbsp; символа, которые не были сопоставлены пробелом в регулярном выражении.Использование \s решило это.

Окончательный шаблон теперь:
moment().format('MMM[\\.] D, YYYY[\\sat\\s]h:[\\d{2} (a|p)m]')

Как только я исправил шаблон, тест прошел, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...