[英]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.