Как вы устанавливаете учетные данные aws-sdk-js, необходимые для запросов?

#jestjs #aws-sdk-js #nock

Вопрос:

У меня есть шутливые модульные тесты, использующие nock для перехвата и возврата фиктивных ответов. Затем я повторно запускаю их на этапе интеграционного тестирования без nock, чтобы он тестировался с использованием фактического api aws и ресурсов.

 nock('https://ssm.us-west-1.amazonaws.com:443')  .post('/', {"Name":"/my-parameter"})  .reply(200, {"Parameter":{"ARN":"arn:aws:ssm:us-west-1:111222333444:parameter/my-parameter","DataType":"text","LastModifiedDate":1617149434.735,"Name":"/my-parameter","Type":"String","Value":"myvalue","Version":4}}, [  'Server',  'Server',  'Date',  'Thu, 08 Apr 2021 00:05:41 GMT',  'Content-Type',  'application/x-amz-json-1.1',  'Content-Length',  '284',  'Connection',  'keep-alive',  'x-amzn-RequestId',  '8885bb26-9018-4e9e-8b2e-56232e46ae17'  ]).persist();  

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

 UnrecognizedClientException: The security token included in the request is invalid.   at Request.extractError (node_modules/aws-sdk/lib/protocol/json.js:52:27)  at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:106:20)  at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)  at Request.emit (node_modules/aws-sdk/lib/request.js:686:14)  at Request.transition (node_modules/aws-sdk/lib/request.js:22:10)  at AcceptorStateMachine.runTo (node_modules/aws-sdk/lib/state_machine.js:14:12)  at node_modules/aws-sdk/lib/state_machine.js:26:10  at Request.lt;anonymousgt; (node_modules/aws-sdk/lib/request.js:38:9)  at Request.lt;anonymousgt; (node_modules/aws-sdk/lib/request.js:688:12)  at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)  

Мне не нужны никакие учетные данные aws для запуска этих фиктивных модульных тестов. Я не вижу, чтобы nock записывал какие-либо другие запросы, которые я должен имитировать, как вход в систему с учетными данными. Как я могу настроить его на подделку учетных данных, чтобы мне не нужно было использовать какое-либо реальное взаимодействие с api aws, и это работает локально без подключения к Интернету? До сих пор я не смог найти ни одного примера. Любой пример проекта, в котором выполняются модульные тесты, имитирующие aws-sdk с помощью nock, был бы полезен для ссылки!

Ответ №1:

Этот вопрос неверен. Переменная среды NOCK_OFF иногда не устанавливалась в этом случае и вводила в заблуждение в этом вопросе.

Он действительно перехватывает запрос. Клиент или фактический api aws не проверяет учетные данные, указанные в запросе, когда nock перехватывает его.