我使用nock进行了jest单元测试,以拦截并返回模拟响应。然后,我在没有nock的集成测试阶段重新运行这些测试,以便使用实际的aws api和资源进行测试。
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.<anonymous> (node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (node_modules/aws-sdk/lib/request.js:688:12)
at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)我不需要任何aws证书来运行这些模拟单元测试。我没有看到nock记录任何其他请求,我必须像凭据登录一样模拟这些请求。我如何设置它来模拟凭据,这样我就不需要任何实际的aws api通信,这在没有互联网连接的情况下在本地运行?到目前为止,我还找不到任何例子。任何运行单元测试并使用nock模拟aws-sdk的项目示例都值得参考!
发布于 2021-11-16 17:16:18
这个问题是错误的。在这种情况下,有时没有设置NOCK_OFF环境变量,从而误导了这个问题。
它确实会拦截该请求。当nock截获请求时,客户端或实际的aws api都不会检查请求中设置的凭据。
https://stackoverflow.com/questions/69981373
复制相似问题