Spec-Zone.ru › Cypress

часы

cy.clock() переопределяет встроенные глобальные функции, связанные со временем, позволяя управлять ими синхронно через cy.tick() или возвращаемый объект clock. Это включает управление:

  • setTimeout
  • clearTimeout
  • setInterval
  • clearInterval
  • Date Объектами

Часы начинаются с эпохи Unix (временной отметки 0). Это означает, что при создании new Date в вашем приложении, время будет January 1st, 1970.

Синтаксис

cy.clock()
cy.clock(now)
cy.clock(now, functionNames)
cy.clock(options)
cy.clock(now, options)
cy.clock(now, functionNames, options)

Использование

Правильное использование

cy.clock()

Аргументы

now (число)

Временная отметка, указывающая, с какой точки времени должны начинаться часы.

functionNames (Массив)

Названия встроенных функций, которые должны быть переопределены часами.

options (Объект)

Передайте объект options, чтобы изменить поведение по умолчанию cy.clock().

Опция Значение по умолчанию Описание
log true Отображает команду в Журнале команд

Возвращаемое значение

cy.clock() возвращает объект clock с методами:

  • clock.tick(milliseconds)

    Передвинуть часы на указанное количество milliseconds. Все таймеры в соответствующем диапазоне времени будут вызваны.

  • clock.restore()

    Восстановить все переопределенные встроенные функции. Это автоматически вызывается между тестами, поэтому обычно не требуется.

Вы также можете получить доступ к объекту clock через this.clock в .then() коллбэке.

Примеры

Без аргументов

Создать часы и использовать их для вызова setInterval

// your app code
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() для перемещения времени, но вы также можете использовать объект clock , возвращаемый cy.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)
  // do something with $form ...
})

Получить доступ к объекту часов для восстановления встроенных функций

Как правило, вручную восстанавливать встроенные функции, которые cy.clock() переопределяет, не нужно, так как это делается автоматически между тестами. Но если вам нужно, объект clock , возвращаемый .restore() методом.

cy.clock().then((clock) => {
  clock.restore()
})

Или через this.clock:

cy.clock()
cy.get('.timer').then(($timer) => {
  this.clock.restore()
  // do something with $timer ...
})

Теперь

Указать временную отметку now

// your app code
$('#date').text(new Date().toJSON())
const now = new Date(2017, 3, 14).getTime() // April 14, 2017 timestamp

cy.clock(now)
cy.visit('/index.html')
cy.get('#date').contains('2017-04-14')

Имена функций

Указать функции для переопределения

В примере ниже будут переопределены только setTimeout и clearTimeout, а другие функции, связанные со временем, останутся без изменений.

cy.clock(null, ['setTimeout', 'clearTimeout'])

Обратите внимание, что вы должны указать Date для переопределения текущей даты и времени. В примере ниже текущее время и дата изменяются без влияния на запланированные таймеры.

cy.clock(Date.UTC(2018, 10, 30), ['Date'])

Using cy.clock() с cy.tick()

Посмотрите наш пример рецепта по тестированию подмены и шпионажа, а также работы со временем.

Восстановить часы

Вы можете восстановить часы и позволить вашему приложению продолжить работу нормально без манипулирования встроенными глобальными функциями, связанными со временем. Это автоматически вызывается между тестами.

cy.clock()
cy.visit('http://localhost:3333')
cy.get('#search').type('Acme Company')
cy.tick(1000)
// more test code here

// restore the clock
cy.clock().then((clock) => {
  clock.restore()
})
// more test code here

Вы также можете восстановить, используя .invoke() для вызова функции restore.

cy.clock().invoke('restore')

Примечания

iframes

iframes не поддерживаются

Обратите внимание, что cy.clock() применяется только к окну top на веб-странице. Он не будет переопределять функции времени для любых iframe , встроенных на странице.

Поведение

Поведение часов до cy.visit()

Если вы вызываете cy.clock() до посещения страницы с помощью cy.visit(), встроенные глобальные функции страницы будут переопределены при загрузке окна, до запуска вашего кода приложения. Поэтому, даже если setTimeout, например, вызывается при загрузке страницы, им всё равно можно управлять через cy.tick(). Это также относится к случаям, когда в ходе теста страница, которая тестируется, перезагружается или изменяется.

Правила

Требования

  • cy.clock() требует быть цепочкой от cy .

Утверждения

  • cy.clock() - это утилитарная команда.
  • cy.clock() не будет выполнять утверждения. Утверждения пройдут, как если бы эта команда не существовала.

Таймауты

  • cy.clock() не может иметь таймаут.

Журнал команд

Создать часы и перемотать их на 1 секунду

cy.clock()
cy.tick(1000)

Вышеприведенная команда будет отображаться в журнале команд как:

Command Log clock

При нажатии на команду clock в журнале команд, консоль выведет следующее:

console.log clock command

См. также

  • cy.spy()
  • cy.stub()
  • cy.tick()
  • Руководство: Заглушки, шпионские программы и часы
  • Рецепт: Заглушки, шпионские программы

© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/clock

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API