Как вы знаете, aws-sdk-mock — замечательная библиотека, позволяющая имитировать aws сервисные вызовы в тестах. Однако вы не можете имитировать экземпляры службы с помощью aws-sdk-mock в некоторых случаях, например, если вы создали экземпляры в глобальной области и пытаетесь имитировать/восстановить до/после каждого теста. Сегодня мы попытаемся найти способ имитировать и восстановить экземпляры службы, используя jest и aws-sdk-mock, чтобы написать правильный тест.

Прежде чем начать, вам нужно знать две вещи;

  • Во-первых, вы не можете имитировать и восстанавливать экземпляры службы в методах beforeEach() и afterEach(), если они создаются в глобальной области видимости.
  • Во-вторых, вы не можете импортировать модуль несколько раз, потому что узел кэширует модуль, и вы должны аннулировать кеш модуля. Так что не пытайтесь перезагружать тестируемый модуль в методах before/afterEach(), потому что это не сработает.

Давайте начнем!

Это наш замечательный код:

И… это наш НЕПРАВИЛЬНЫЙ тестовый код.

Этот тест никогда не сработает, потому что aws-sdk-mock попытается найти экземпляр службы, который мы пытаемся имитировать, в области действия метода.

попробуем сделать что-нибудь другое.

Приведенный выше тест определенно сработает. Однако, если код, который мы пытаемся протестировать, содержит некоторые объекты с состоянием, тест может не дать надлежащего результата, и код может дать сбой в производственной среде, хотя все тесты были пройдены.

К счастью, у нас есть jest, и он позволяет импортировать модули в виде изолированных в определенной области.

Если мы вернемся к первому тесту;

Единственное, что нам нужно сделать, это переместить переменную модуля в область describe() из глобальной области видимости и импортировать модуль с помощью jest.isolatedModules() в то место, где мы написали тестовый сценарий.

Вот и все!

Изображения: