admin管理员组文章数量:1325236
So I'm running some unit tests and I want to essentially stub out the promise so it resolves, or rejects, when I want it to. Here is what my code looks like.
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();
}
I would like to mock out docClient.query(params).promise()
Here is what my current test looks like, it runs but when I debug it says the PromiseStatus of resObj is rejected. I'd like to mock it out so I could have values in data.Items to assert.
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()
})
})
So I'm running some unit tests and I want to essentially stub out the promise so it resolves, or rejects, when I want it to. Here is what my code looks like.
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();
}
I would like to mock out docClient.query(params).promise()
Here is what my current test looks like, it runs but when I debug it says the PromiseStatus of resObj is rejected. I'd like to mock it out so I could have values in data.Items to assert.
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()
})
})
Share
Improve this question
asked Mar 15, 2019 at 19:05
jwolsborn♦jwolsborn
7162 gold badges8 silver badges30 bronze badges
1 Answer
Reset to default 6You can use aws-sdk-mock to mock DynamoDB DocumentClient with a custom response.
To mock a successful response you can do:
AWS.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
callback(null, {Items: [1, 2, 3]});
});
And to mock an error, you can simply do:
AWS.mock('DynamoDB.DocumentClient', 'query', function(params, callback) {
callback(new Error("Your error"));
});
Keep in mind aws-sdk-mock will throw an error automatically if you provide invalid parameters, which is a neat feature.
This will work even if you call .promise() on the SDK call
As per ment, to mock the service for when it is being passed into the function:
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]});
});
})
})
本文标签: javascriptMocking promise from DynamoDB DocumentclientStack Overflow
版权声明:本文标题:javascript - Mocking promise from DynamoDB Documentclient - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742167107a2426028.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论