You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dayjs未读取当前系统时间:Cypress测试中始终返回固定旧时间

问题根因

  1. 你把dayjs()获取时间的逻辑放在了Cypress命令链的外层,属于同步执行代码:Cypress在运行测试用例时,会先执行完所有同步代码再按顺序执行链式异步命令,你声明presentDateTime的时机远早于实际执行断言的时机,值早就被固定。
  2. 你写的时间格式串存在错误:HH:MM:ss里大写MM是月份占位符,分钟的正确占位符是小写mm,这会导致你输出的“分钟”位实际是当前月份的值,进一步加剧时间显示异常。
  3. 也有可能你的测试代码里全局调用了cy.clock()锁定了测试时间,导致所有客户端时间获取逻辑都返回锁定的固定值。

修复方案

第一步:修正时间格式串

把DD MMM YYYY HH:MM:ss改成DD MMM YYYY HH:mm:ss,确保分钟位正常输出。

第二步:把时间获取逻辑放到异步回调中

调整代码顺序,确保执行断言的前一刻才实时获取当前时间:

cy.spinner().should('not.exist');
engreenPo.firstNameLastName.then((text1) => {
    // 执行断言前再实时获取时间,避免预计算导致值固定
    const presentDateTime = dayjs().format('DD MMM YYYY HH:mm:ss');
    cy.log(presentDateTime);
    engreenPo.dynamicPushHeader.should('contain', `${presentDateTime} by ${text1}`);
});

第三步:排查全局时间锁定配置

如果修改后时间仍然固定,检查你的测试用例、support/e2e.js等全局配置文件是否有调用cy.clock()锁定时间,如有需要先恢复时间:

// 放在用例最开头恢复系统时间
cy.clock().then(clock => clock.restore());

特殊场景适配

如果你要匹配的页面时间是UTC时区的,需要把dayjs的输出转成UTC格式:

const presentDateTime = dayjs().utc().format('DD MMM YYYY HH:mm:ss');

内容的提问来源于stack exchange,提问作者Hamza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:45:01