clock
cy.clock()
覆盖与时间相关的原生全局函数,使其可以通过 cy.tick()
或返回的 clock
对象进行同步控制。这包括控制以下函数:
setTimeout
clearTimeout
setInterval
clearInterval
Date
对象
时钟从 Unix 纪元(时间戳为 0)开始。这意味着当你在应用中实例化 new Date
时,它将显示 1970 年 1 月 1 日
的时间。
语法
cy.clock()
cy.clock(now)
cy.clock(now, functionNames)
cy.clock(options)
cy.clock(now, options)
cy.clock(now, functionNames, options)
用法
正确用法
cy.clock()
参数
now (number)
指定时钟起始时间的时间戳。
functionNames (Array)
时钟应覆盖的原生函数名称。
options (Object)
传入一个选项对象以更改 cy.clock()
的默认行为。
选项 | 默认值 | 描述 |
---|---|---|
log | true | 在 命令日志 中显示该命令 |
生成结果
cy.clock()
返回一个包含以下方法的 clock
对象:
-
clock.tick(milliseconds)
将时钟向前移动指定的
milliseconds
毫秒。受 影响的计时器将被触发。 -
clock.restore()
恢复所有被覆盖的原生函数。此操作会在测试之间自动调用,通常无需手动执行。
-
clock.setSystemTime(now)
将系统时间更改为新的
now
时间。now
可以是时间戳、日期对象,或不传参(默认为 0)。不会触发任何计时器,也不会改变它们剩余的触发时间。
你也可以在 .then()
回调中通过 this.clock
访问 clock
对象。
示例
无参数
创建一个时钟并用它触发 setInterval
// 你的应用代码
let seconds = 0
setInterval(() => {
$('#seconds-elapsed').text(++seconds + ' seconds')
}, 1000)
cy.clock()
cy.visit('/index.html')
cy.tick(1000)
cy.get('#seconds-elapsed').should('have.text', '1 seconds')
cy.tick(1000)
cy.get('#seconds-elapsed').should('have.text', '2 seconds')
访问时钟对象以同步移动时间
大多数情况下,使用 cy.tick()
移动时间更为方便,但你也可以使用 cy.clock()
返回的 clock
对象。
cy.clock().then((clock) => {
clock.tick(1000)
})
如果需要,你可以在链式调用中再次调用 cy.clock()
来实现这一目的。
cy.clock()
cy.get('input').type('Jane Lane')
cy.clock().then((clock) => {
clock.tick(1000)
})
时钟对象也可以通过 this.clock
在任何 .then()
回调中访问。
cy.clock()
cy.get('form').then(($form) => {
this.clock.tick(1000)
// 对 $form 进行某些操作...
})