gpt4 book ai didi

javascript - 来自 DynamoDB Documentclient 的模拟 promise

转载 作者:行者123 更新时间:2023-11-29 15:59:15 27 4
gpt4 key购买 nike

所以我正在运行一些单元测试,我想从根本上消除 promise ,以便它在我想要的时候解决或拒绝。这是我的代码的样子。

getStatusForPromiseID = async (promiseId, docClient) => {
let data = await getStatusfromDB(promiseId, docClient);
console.log("data.Items =========>", data.Items);
return {
"promiseId": data.Items[0].event_id,
"status": data.Items[0].STATUS,
"errors":data.Items[0].ERRORS
}

}

function getStatusfromDB(promiseId, docClient) {
console.log("In getActiveTokenFromDB " + promiseId);

var params = {
TableName: 'epayments-nonprod-transactions',
KeyConditionExpression: 'event_id = :event_id',
ExpressionAttributeValues: {
':event_id': promiseId
}
};

return docClient.query(params).promise();

}

我想模拟 docClient.query(params).promise()

这是我当前测试的样子,它运行但当我调试时它说 resObj 的 PromiseStatus 被拒绝。我想模拟它,这样我就可以在 data.Items 中有值来断言。

describe('App function tests', ()=>{


test('getStatusForPromiseID', ()=>{

let docClient = new aws.DynamoDB.DocumentClient()
docClient.query.promise = jest.fn()
docClient.query.promise.mockImplementation(cb =>{
cb(true, {Items: [1,2,3]})
})


let resObj = getStatusForPromiseID('11011', docClient)
expect(docSpy).toHaveBeenCalled()

})
})

最佳答案

您可以使用 aws-sdk-mock使用自定义响应模拟 DynamoDB DocumentClient。

要模拟一个成功的响应,你可以这样做:

AWS.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
callback(null, {Items: [1, 2, 3]});
});

要模拟一个错误,你可以简单地做:

AWS.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
callback(new Error("Your error"));
});

请记住,如果您提供无效参数,aws-sdk-mock 会自动抛出错误,这是一个很好的功能。

即使您在 SDK 调用中调用 .promise() 也会起作用

根据评论,在将服务传递给函数时模拟该服务:

var AWS = require("aws-sdk");
var AWS_mock = require("aws-sdk-mock");

describe('App function tests', ()=>{
test('getStatusForPromiseID', ()=>{
AWS_mock.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
callback(null, {Items: [1, 2, 3]});
});

let docClient = new AWS.DynamoDB.DocumentClient();

return getStatusForPromiseID('11011', docClient)
.then(result => {
expect(result).to.equal({Items: [1, 2, 3]});
});
})
})

关于javascript - 来自 DynamoDB Documentclient 的模拟 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55189251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com