#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 перехватывает его.