Фейки
Введение
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. В противном случае, переданное значение используется в качестве свойства 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/v13/fakes