Фейки
Введение
fake доступен в Sinon начиная с версии 5. Он позволяет создавать fake Function с возможностью установить поведение по умолчанию поведение. Доступные поведения в основном соответствуют API sinon.stub.
В Sinon, fake — это Function, который записывает аргументы, возвращаемое значение, значение this и брошенное исключение (если таковое имеется) для всех его вызовов.
Фейк неизменяемый: после создания поведение не изменится.
В отличие от sinon.spy и sinon.stub методов, API sinon.fake знает только как создавать фейки и не занимается их подключением к системе, которую тестируем. Для подключения фейков к системе, которую тестируем, вы можете использовать методы sinon.replace*.
Когда использовать фейки?
Фейки — это альтернатива Stubs и Spies, и они могут полностью заменить все такие случаи использования.
Они предназначены для более простого использования и избегают многих ошибок, имея неизменяемое поведение.
Созданный fake Function, с поведением или без него, имеет тот же API, что и (sinon.spy)шпионы.
Использование фейков вместо шпионов
Использование фейков вместо подстановок
Создание фейка
Создайте fake Function с или без поведения. Созданный Function имеет тот же API, что и sinon.spy.
Создание фейка без поведения
Создание фейка с пользовательским поведением
Фейки с поведением
Фейки нельзя изменить после создания с поведением.
sinon.fake.returns(value);
Создаёт фейк, который возвращает value аргумент.
sinon.fake.throws(value);
Создаёт фейк, который выбрасывает Error со значением, указанным в качестве свойства message.
Если в качестве аргумента value передаётся Error, то это будет значение, которое будет выброшено. Если передаётся любое другое значение, то это значение будет использовано для свойства message выброшенного Error.
sinon.fake.resolves(value);
Создаёт фейк, который возвращает разрешённый Promise для переданного значения.
sinon.fake.rejects(value);
Создаёт фейк, который возвращает отклоненный Promise для переданного значения.
Если в качестве аргумента value передаётся Error, то это будет значение промиса. Если передаётся любое другое значение, то это значение будет использовано для свойства message возвращённого Error промисом.
sinon.fake.yields([value1, ..., valueN]);
sinon.fake.yields принимает некоторые значения и возвращает функцию, которая, когда вызывается, ожидает последним аргументом коллбэк и вызывает этот коллбэк с теми же ранее заданными значениями. Возвращаемая функция обычно используется для имитации функции сервиса, которая принимает коллбэк в качестве последнего аргумента.
В примере кода ниже функция ‘readFile’ модуля ‘fs’ заменяется на фейковую функцию, созданную sinon.fake.yields. Когда фейковая функция вызывается, она всегда вызывает последний переданный ей аргумент, который должен быть коллбэком, со значениями, которые функция yields получила ранее.
sinon.fake.yieldsAsync([value1, ..., valueN]);
Аналогично yields, yieldsAsync также возвращает функцию, которая, когда вызывается, ожидает последний аргумент — коллбэк и вызывает этот коллбэк с теми же ранее заданными значениями. Однако возвращаемая функция вызывает этот коллбэк асинхронно, а не немедленно, т.е. в следующем цикле обработки событий.
Сравните пример кода ниже с примером кода выше для yields чтобы увидеть разницу.
sinon.fake(func);
Оборачивает существующую Function для записи всех взаимодействий, оставляя за func предоставление поведения.
Созданный fake Function имеет тот же API, что и sinon.spy.
Это полезно, когда требуется сложное поведение, не покрываемое методами sinon.fake.*, или при обёртывании существующей функции или метода.
Свойства экземпляра
Свойства экземпляра такие же, как у sinon.spy. Следующие примеры показывают лишь некоторые из доступных вам свойств. Обратитесь к документации по шпиону для получения полного списка.
f.callback
Это свойство — удобный способ получить ссылку на последний коллбэк, переданный в последний вызов фейка. Такая же удобство добавлена к вызовам шпионов.
f.firstArg
Это свойство — удобный способ получить ссылку на первый аргумент, переданный в последний вызов фейка. Такая же удобство добавлена к вызовам шпионов.
f.lastArg
Это свойство — удобный способ получить ссылку на последний аргумент, переданный в последний вызов фейка. Такая же удобство добавлена к вызовам шпионов.
Добавление фейка в систему, которую тестируем
В отличие от sinon.spy и sinon.stub, sinon.fake знает только о создании фейков, а не о замене свойств в тестируемой системе.
Чтобы заменить свойство, вы можете использовать метод sinon.replace. Когда вы хотите восстановить изменённые свойства, вызовите метод sinon.restore.
© 2010–2022 Christian Johansen
Licensed under the BSD License.
https://sinonjs.org/releases/v14/fakes