Spec-Zone.ru › Sinon.JS 8

Моки

Введение

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

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

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

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

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

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

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

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

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

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

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

Чтобы увидеть, как выглядят моки в 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");

Переопределяет obj.method с помощью функции мока и возвращает её.

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

mock.restore();

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

mock.verify();

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

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

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

mock.usingPromise(promiseLibrary);

Приводит к тому, что все ожидания, созданные из мока, возвращают обещания, используя конкретную библиотеку обещаний вместо глобальной, когда используется expectation.rejects или expectation.resolves. Возвращает объект мока для возможности цепочки.

С sinon@6.2.0

Ожидания

Все методы ожидания возвращают ожидание, что означает, что вы можете их объединить.

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

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

var expectation = sinon.expectation.create([methodName]);

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

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

var expectation = sinon.mock([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 в качестве this.

expectation.verify();

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

© 2010–2020 Christian Johansen
Licensed under the BSD License.
https://sinonjs.org/releases/v8.1.1/mocks

Spec-Zone.ru

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