Заглушка
Замените функцию, запишите её использование и контролируйте её поведение.
Примечание:
.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
Вы увидите следующее в журнале команд:
Примечания
Восстановления
Автоматическое сброс/восстановление между тестами
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
Команда выше отобразится в журнале команд как:
При нажатии на событие (stub-1) в журнале команд консоль выводит следующее:
История
| Версия | Изменения |
|---|---|
| 0.20.0 | Добавлен метод .log(bool) |
| 0.18.8 | Добавлена команда cy.stub() |
См. также
© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/stub