簡體   English   中英

來自 DynamoDB Documentclient 的模擬承諾:請求中包含的安全令牌無效

[英]Mocking promise from DynamoDB Documentclient: The security token included in the request is invalid

我正在使用 aws-sdk-mock 為 aws-dynamodb 運行一些單元測試用例。 但我得到以下錯誤:

UnrecognizedClientException:請求中包含的安全令牌無效

這是我的代碼的樣子。

// Code:
async getUser(email) {
    const params = {
      TableName: 'test',
      Key: {
        email: email
      }
    };
    return await docClient.get(params).promise();
}

這是我當前的測試的樣子:

// Testcase:
it('Get all categories data successfully', async done => {
      AWSMock.setSDKInstance(AWS);
      AWSMock.mock('DynamoDB.DocumentClient', 'get', (params, callback) => {
        callback(null, { Item: { 
            email: 'test@test.com',
            name: 'Test profile'
          }
        });
      });
      const response = await service.getUserProfile(eventStub.headers.email);
      expect(response).to.equal({Items: { 
            email: 'test@test.com',
            name: 'Test profile'
          }});;
      AWSMock.restore('DynamoDB.DocumentClient');
      done();
});
UnrecognizedClientException: The security token included in the request is invalid

      at Request.extractError (node_modules/aws-sdk/lib/protocol/json.js:51: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:683: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:685:12)
      at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)
      at Request.emit (node_modules/aws-sdk/lib/sequential_executor.js:78:10)
      at Request.emit (node_modules/aws-sdk/lib/request.js:683: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:685:12)
      at Request.callListeners (node_modules/aws-sdk/lib/sequential_executor.js:116:18)
      at callNextListener (node_modules/aws-sdk/lib/sequential_executor.js:96:12)
      at IncomingMessage.onEnd (node_modules/aws-sdk/lib/event_listeners.js:307:13)

我知道這是一個遲到的答案,但為了其他任何發現這個問題的人:

根據 aws-sdk-mock自述文件,請參閱實例化 AWS 服務示例部分。 AWS 服務需要在被測試的函數中實例化。

自述文件

注意:AWS 服務需要在被測試的函數中初始化,以便模擬 SDK 方法,例如,對於 AWS Lambda 函數,示例 1 將導致配置中未定義的錯誤區域,而在示例 2 中,SDK 將被成功模擬.

在您的示例中,您可能需要這樣做:

async getUser(email) {
  // instantiate the service inside the function being tested in order for aws-sdk-mock
  // to mock it successfully
  if(process.env.NODE_ENV === 'test')
    docClient = new AWS.DynamoDB.DocumentClient()

  const params = {
    TableName: 'test',
    Key: {
      email: email
    }
  }
  return docClient.get(params).promise()
}

我也犯了這個錯誤。 希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM