Spec-Zone.ru › Cypress

spy

Оборачивайте метод шпионом, чтобы записывать вызовы и аргументы функции.

Примечание: .spy() предполагает, что вы уже знакомы с нашим руководством: Заглушки, шпионы и часы

Синтаксис

cy.spy(object, method)

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

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

cy.spy(user, 'addFriend')

Аргументы

object (Объект)

Объект, содержащий метод, который нужно обернуть.

method (Строка)

Имя метода в объекте, который нужно обернуть.

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

В отличие от большинства команд Cypress, cy.spy() является синхронной командой и возвращает значение (шпион), а не цепочку объектов, похожих на Promise.

cy.spy() возвращает шпион Sinon.js. Поддерживаются все методы, доступные для шпионов Sinon.js.

Примеры

Метод

Оборачивание метода шпионом

// assume App.start calls util.addListeners
cy.spy(util, 'addListeners')
App.start()
expect(util.addListeners).to.be.called

Отключение регистрации в журнале команд

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

const obj = {
  foo() {},
}
const stub = cy.stub(obj, 'foo').log(false)

Дополнительные примеры cy.spy()

Просмотрите наш пример рецепта по тестированию шпионов, заглушек и времени

Псевдонимы

Добавление псевдонима с помощью .as() к шпионам упрощает их идентификацию в сообщениях об ошибках и журнале команд Cypress.

const obj = {
  foo() {},
}
const spy = cy.spy(obj, 'foo').as('anyArgs')
const withFoo = spy.withArgs('foo').as('withFoo')

obj.foo()
expect(spy).to.be.called
expect(withFoo).to.be.called // purposefully failing assertion

В журнале команд вы увидите следующее:

spies with aliases

Примечания

Восстановления

Автоматическое сброс/восстановление между тестами

cy.spy() создает шпионов в песочнице, поэтому все созданные шпионы автоматически сбрасываются/восстанавливаются между тестами, без необходимости явного сброса/восстановления.

Различия

Разница между cy.spy() и cy.stub()

Основное различие между cy.spy() и cy.stub() заключается в том, что cy.spy() не заменяет метод, а только оборачивает его. Таким образом, хотя вызовы записываются, исходный метод все равно вызывается. Это может быть очень полезно при тестировании методов нативных объектов браузера. Вы можете проверить, вызывается ли метод вашим тестом, и при этом исходный метод будет выполнен.

Утверждения

Поддержка утверждений

Cypress также имеет встроенную поддержку sinon-chai, поэтому любые утверждения, поддерживаемые sinon-chai, могут быть использованы без какой-либо настройки.

Правила

Требования

  • cy.spy() требует привязки к cy.

Утверждения

  • cy.spy() не может содержать утверждений.

Таймауты

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

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

Создайте шпиона, дайте ему псевдоним и вызовите его

const obj = {
  foo() {},
}
const spy = cy.spy(obj, 'foo').as('foo')

obj.foo('foo', 'bar')
expect(spy).to.be.called

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

Command Log spy

При нажатии на событие spy-1 в журнале команд консоль выведет следующее:

Console Log spy

История

Версия Изменения
0.20.0 Добавлен метод .log(bool)
0.18.8 Добавлена команда cy.spy()

См. также

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

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

Spec-Zone.ru

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