Skip to main content
Cypress应用

tick

在使用 cy.clock() 覆盖原生时间函数后,移动时间。

caution

必须先调用 cy.clock() 覆盖原生时间函数,然后才能使用 cy.tick()

语法

cy.tick(milliseconds, options)

用法

正确用法

cy.tick(500)

参数

milliseconds (Number)

要移动时钟的毫秒数。在此时间范围内的任何计时器将被调用。

options (Object)

传入一个选项对象以更改 cy.tick() 的默认行为。

选项默认值描述
logtrue命令日志中显示该命令

生成结果 了解主题管理

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)

上述命令将在命令日志中显示为:

Console Log tick

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

Console Log tick

历史

版本变更
7.0.0cy.tick() 添加了 log 选项
0.18.8添加了 cy.tick() 命令

另请参阅