Spec-Zone.ru › Cypress

Заглушка

Замените функцию, запишите её использование и контролируйте её поведение.

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

Синтаксис

cy.stub()
cy.stub(object, method)
cy.stub(object, method, replacerFn)

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

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

cy.stub(user, 'addFriend')

Аргументы

object (Объект)

Объект, в котором object должна быть заменена.

method (Строка)

Имя method в объекте, которое нужно обернуть.

replacerFn (Функция)

Функция, используемая для замены method в объекте.

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

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

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

Примеры

Метод

Создайте заглушку и вручную замените функцию

// assume App.start calls util.addListeners
util.addListeners = cy.stub()

App.start()
expect(util.addListeners).to.be.called

Замените метод заглушкой

// assume App.start calls util.addListeners
cy.stub(util, 'addListeners')

App.start()
expect(util.addListeners).to.be.called

Замените метод функцией

// assume App.start calls util.addListeners
let listenersAdded = false

cy.stub(util, 'addListeners', () => {
  listenersAdded = true
})

App.start()
expect(listenersAdded).to.be.true

Укажите возвращаемое значение заглушенного метода

// assume App.start calls util.addListeners, which returns a function
// that removes the listeners
const removeStub = cy.stub()

cy.stub(util, 'addListeners').returns(removeStub)

App.start()
App.stop()
expect(removeStub).to.be.called

Замените встроенные методы window, такие как prompt

// assume App.start uses prompt to set the value of an element with class "name"
cy.visit('http://localhost:3000', {
  onBeforeLoad(win) {
    cy.stub(win, 'prompt').returns('my custom message')
  },
})

App.start()

cy.window().its('prompt').should('be.called')
cy.get('.name').should('have.value', 'my custom message')

Отключить запись в журнал команд

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

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

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

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

Псевдонимы

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

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

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

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

stubs with aliases

Примечания

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

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

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

Отличия

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

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

Правила

Требования

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

Утверждения

  • cy.stub() не может иметь утверждений, привязанных к нему.

Таймауты

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

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

Создать заглушку, назначить ей псевдоним и вызвать её

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

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

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

Command Log stub

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

Console Log stub

История

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

См. также

  • .as()
  • cy.clock()
  • cy.spy()
  • Руководство: Заглушки, шпионские программы и часы
  • Рецепт: Заглушки, шпионаж
  • Рецепт: Тестирование на единицу - Заглушение зависимостей
  • Заглушка API навигатора в тестах взаимодействия с пользователем

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

Spec-Zone.ru

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