Spec-Zone.ru › Sinon.JS 11

Моки

Введение

Что такое моки?

Моки (и ожидания моков) — это фиктивные методы (как шпионы) с запрограммированным поведением (как стабы), а также с **запрограммированными ожиданиями**.

Мок вызовет ошибку в вашем тесте, если он не будет использован как ожидалось.

Когда использовать моки?

Моки следует использовать только для тестируемого метода. В каждом юнит-тесте должен быть один тестируемый модуль.

Если вы хотите контролировать, как используется ваш модуль, и предпочитаете указывать ожидания заранее (вместо утверждений после факта), используйте мок.

Когда **не** использовать моки?

Моки имеют встроенные ожидания, которые могут привести к ошибке в тесте.

Таким образом, они навязывают детали реализации. Правило хорошего тона: если вы не добавите утверждение для определенного вызова, не мокируйте его. Используйте стаб вместо этого.

В общем, в одном тесте должно быть **не более одного** мока (возможно, с несколькими ожиданиями).

Ожидания реализуют как интерфейсы шпионов, так и стабов.

Чтобы увидеть, как моки выглядят в Sinon.JS, вот один из тестов PubSubJS еще раз, на этот раз использующий метод в качестве обратного вызова и моки для проверки его поведения

"test should call all subscribers when exceptions": function () {
    var myAPI = { method: function () {} };

    var spy = sinon.spy();
    var mock = sinon.mock(myAPI);
    mock.expects("method").once().throws();

    PubSub.subscribe("message", myAPI.method);
    PubSub.subscribe("message", spy);
    PubSub.publishSync("message", undefined);

    mock.verify();
    assert(spy.calledOnce);
}

API моков

Свойства

`var mock = sinon.mock(obj)`

Создает мок для указанного объекта.

Не изменяет объект, но возвращает объект мока для установки ожиданий для методов объекта.

`var expectation = mock.expects(method)`

Переопределяет метод мока и возвращает его.

См. ожидания ниже.

`mock.restore()`

Восстанавливает все смокированные методы.

`mock.verify()`

Проверяет все ожидания мока.

Если какое-либо ожидание не выполнено, генерируется исключение.

Также восстанавливает смокированные методы.

`mock.usingPromise(promiseLibrary)`

Заставляет все созданные ожидания мока возвращать обещания, используя определённую библиотеку обещаний вместо глобальной, при использовании `Promise` или `RSVP.Promise`. Возвращает объект мока для цепочки вызовов.

С версии sinon@6.2.0

Ожидания

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

Типичное использование:

sinon.mock(jQuery).expects("ajax").atLeast(2).atMost(5);
jQuery.ajax.verify();

`var expectation = sinon.expectation(methodName)`

Создаёт ожидание без объекта мока, что по сути является анонимной функцией мока.

Имя метода необязательно и используется в сообщениях об ошибках для повышения удобочитаемости.

`var expectation = mock.expects(methodName)`

То же самое, что и выше.

`expectation.atLeast(number)`

Указывает минимальное количество ожидаемых вызовов.

`expectation.atMost(number)`

Указывает максимальное количество ожидаемых вызовов.

`expectation.never()`

Ожидать, что метод никогда не будет вызван.

`expectation.once()`

Ожидать, что метод будет вызван ровно один раз.

`expectation.twice()`

Ожидать, что метод будет вызван ровно дважды.

`expectation.thrice()`

Ожидать, что метод будет вызван ровно трижды.

`expectation.exactly(number)`

Ожидать, что метод будет вызван ровно number раз.

`expectation.withArgs(arg1, arg2, ...)`

Ожидать, что метод будет вызван с предоставленными аргументами и, возможно, с другими.

Объект `expectation` хранит только один набор аргументов, указанных с `withArgs`. Последующие вызовы будут перезаписывать ранее указанный набор аргументов (даже если они отличаются), поэтому обычно не предполагается, что этот метод будет вызываться более одного раза в каждом тестовом случае.

`expectation.withExactArgs(arg1, arg2, ...)`

Ожидать, что метод будет вызван с предоставленными аргументами и без других.

Объект `expectation` хранит только один набор аргументов, указанных с `withExactArgs`. Последующие вызовы будут перезаписывать ранее указанный набор аргументов (даже если они отличаются), поэтому обычно не предполагается, что этот метод будет вызываться более одного раза в каждом тестовом случае.

`expectation.on(obj)`

Ожидать, что метод будет вызван с `obj` в качестве параметра.

`expectation.verify()`

Проверяет ожидание и генерирует исключение, если оно не выполнено.

© 2010–2022 Christian Johansen
Licensed under the BSD License.
https://sinonjs.org/releases/v11/mocks

Spec-Zone.ru

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