Wol*_*lzy 6 javascript amazon-web-services jestjs
所以我正在运行一些单元测试,我想从根本上消除承诺,以便在我想要的时候解决或拒绝。这是我的代码的样子。
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();
}
Run Code Online (Sandbox Code Playgroud)
我想模拟 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()
})
})
Run Code Online (Sandbox Code Playgroud)
您可以使用aws-sdk-mock来模拟带有自定义响应的 DynamoDB DocumentClient。
要模拟成功的响应,您可以执行以下操作:
AWS.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
callback(null, {Items: [1, 2, 3]});
});
Run Code Online (Sandbox Code Playgroud)
要模拟错误,您可以简单地执行以下操作:
AWS.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
callback(new Error("Your error"));
});
Run Code Online (Sandbox Code Playgroud)
请记住,如果您提供无效参数,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]});
});
})
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5146 次 |
| 最近记录: |