tick
在使用 cy.clock()
覆盖原生时间函数后,移动时间。
caution
必须先调用 cy.clock()
覆盖原生时间函数,然后才能使用 cy.tick()
。
语法
cy.tick(milliseconds, options)
用法
正确用法
cy.tick(500)
参数
milliseconds (Number)
要移动时钟的毫秒数。在此时间范围内的任何计时器将被调用。
options (Object)
传入一个选项对象以更改 cy.tick()
的默认行为。
选项 | 默认值 | 描述 |
---|---|---|
log | true | 在命令日志中显示该命令 |
生成结果
cy.tick()
返回一个具有以下方法的 clock
对象:
-
clock.tick(milliseconds)
将时钟移动指定的毫秒数。在此时间范围内的任何计时器将被调用。
-
clock.restore()
恢复所有被覆盖的原生函数。这会在测试之间自动调用,通常不需要手动调用。
你也可以在 .then()
回调中通过 this.clock
访问 clock
对象。
示例
毫秒
创建一个时钟并移动时间以触发 setTimeout
// 由 index.html 加载的应用代码
window.addIntro = () => {
setTimeout(() => {
document.getElementById('#header').textContent = 'Hello, World'
}, 500)
}
cy.clock()
cy.visit('/index.html')
cy.window().invoke('addIntro')
cy.tick(500)
cy.get('#header').should('have.text', 'Hello, World')
结合使用 cy.clock()
和 cy.tick()
恢复时钟
你可以恢复时钟,让你的应用在不操纵与时间相关的原生全局函数的情况下正常运行。这会在测试之间自动调用。
cy.clock()
cy.visit('http://localhost:3333')
cy.get('#search').type('Acme Company')
cy.tick(1000)
// 更多测试代码
// 恢复时钟
cy.clock().then((clock) => {
clock.restore()
})
// 更多测试代码
你也可以使用 .invoke() 调用 restore
函数来恢复时钟。
cy.clock().invoke('restore')
规则
要求
cy.tick()
需要链式调用cy
。cy.tick()
需要先调用cy.clock()
。
断言
cy.tick()
是一个实用命令。cy.tick()
不会运行断言。断言会直接通过,就像该命令不存在一样。
超时设置
cy.tick()
不会超时。
命令日志
创建一个时钟并将其移动 1 秒
cy.clock()
cy.tick(1000)
上述命令将在命令日志中显示为:

当点击命令日志中的 tick
命令时,控制台会输出以下内容:

历史
版本 | 变更 |
---|---|
7.0.0 | 为 cy.tick() 添加了 log 选项 |
0.18.8 | 添加了 cy.tick() 命令 |