Как вы знаете, aws-sdk-mock
— замечательная библиотека, позволяющая имитировать aws
сервисные вызовы в тестах. Однако вы не можете имитировать экземпляры службы с помощью aws-sdk-mock
в некоторых случаях, например, если вы создали экземпляры в глобальной области и пытаетесь имитировать/восстановить до/после каждого теста. Сегодня мы попытаемся найти способ имитировать и восстановить экземпляры службы, используя jest и aws-sdk-mock
, чтобы написать правильный тест.
Прежде чем начать, вам нужно знать две вещи;
- Во-первых, вы не можете имитировать и восстанавливать экземпляры службы в методах
beforeEach()
иafterEach()
, если они создаются в глобальной области видимости. - Во-вторых, вы не можете импортировать модуль несколько раз, потому что узел кэширует модуль, и вы должны аннулировать кеш модуля. Так что не пытайтесь перезагружать тестируемый модуль в методах before/afterEach(), потому что это не сработает.
Давайте начнем!
Это наш замечательный код:
И… это наш НЕПРАВИЛЬНЫЙ тестовый код.
Этот тест никогда не сработает, потому что aws-sdk-mock
попытается найти экземпляр службы, который мы пытаемся имитировать, в области действия метода.
попробуем сделать что-нибудь другое.
Приведенный выше тест определенно сработает. Однако, если код, который мы пытаемся протестировать, содержит некоторые объекты с состоянием, тест может не дать надлежащего результата, и код может дать сбой в производственной среде, хотя все тесты были пройдены.
К счастью, у нас есть jest, и он позволяет импортировать модули в виде изолированных в определенной области.
Если мы вернемся к первому тесту;
Единственное, что нам нужно сделать, это переместить переменную модуля в область describe()
из глобальной области видимости и импортировать модуль с помощью jest.isolatedModules() в то место, где мы написали тестовый сценарий.
Вот и все!
Изображения: