我是柏树的新手,对自己做错了事感到好奇。
我有一个测试,可以验证页面上表格的内容。其中一列包含格式化的日期-该日期可能会稍微偏离一点,所以我使用正则表达式来验证它,而不是严格的比较。
测试看起来像这样:
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')
或测试中的其他地方做错了吗?
答案 0 :(得分:0)
我知道了-样本中有两个问题。
@ug_发现了一个问题,moment.format()
在渲染文字方括号时效果不佳。他们建议使用捕获小组来解决该问题:
之前:
moment().format('MMM[\]. D, YYYY [at] h:[.. [a|p]m]')
之后:
moment().format('MMM[\]. D, YYYY [at] h:[.. (a|p)m]')
此外,我意识到要匹配的字符串包含两个
字符,而正则表达式中的空格则不匹配。使用\s
解决了这个问题。
现在的最终模式是:
moment().format('MMM[\\.] D, YYYY[\\sat\\s]h:[\\d{2} (a|p)m]')
一旦我修复了模式,测试就会按预期通过。