Я запускаю тесты и заглушаю функцию, которая вызывает функцию AWS sqs.deleteMessage..promise () вызывается при вызове этой функции.Каждый раз, когда я запускаю свои тесты с покрытием, я замечаю, что он переходит к блоку catch, поэтому при вызове .promise () должна происходить ошибка.
Я пытался заглушить функцию, чтобы разрешить обещание, ноэто не похоже на работу.Я также пытался вернуть данные, но у меня все та же проблема.
Ниже приведен пример кода, который я пытаюсь протестировать.Он никогда не достигает строки logger.info ()
fooObj.js
const foo = async (req) => {
try{
let res = await bar.deleteMessage(handle).promise();
logger.info("Sqs result message " + JSON.stringify(res));
} catch(error){
#catch block code
}
}
Ниже приведен код для bar.deleteMessage () bar.js
const aws = require('aws-sdk');
const sqs = new aws.SQS();
deleteMessage = function(handle){
return sqs.deleteMessage({
ReceiptHandle: handle
});
}
И, наконец, вот тестовый код
const fooObj = require('foo')
const barObj = require('bar')
jest.mock('bar')
describe('foo test', ()=>{
test('a test' , ()=>{
barObj.deleteMessage.mockImplementation(()=>{
return Promise.resolve({status:200})
});
return fooObj.foo(req).then(data=>{
#Expect statements here
})
}
}
Так что я бы хотел, чтобы строка logger.info была достигнута в покрытии, но я предполагаю, что проблема связана с тем, как я заглушаю функцию bar.deleteMessage.Я мог бы использовать aws-sdk-mock, но мне кажется, что я нарушаю принципы модульного тестирования, высмеивая вызов sqs, находящийся в другом файле, и правильный способ сделать это - просто заглушить функцию bar.deletemessage ()