我在 Node 应用程序中使用 AWS SQS 队列,我必须为此编写单元测试用例。为此,我想在测试文件中模拟 SQS 函数调用 sendMessage()
,我该怎么办?
我尝试使用 aws-sdk-mock
但是在调用 sendMessage()
时,该函数正在尝试连接到队列 URL。
测试文件
import AWSMock from 'aws-sdk-mock'
import sendMessage from '../api/sqs/producer'
describe.only('Test case for SQS SendMessage', () => {
it('should return the UserEvent', async () => {
AWSMock.mock('SQS', 'sendMessage', () => Promise.resolve('Success'))
const res = await sendMessage('testURL', 'data')
console.log('RES', res.response.data)
})
})
制作人档案
const AWS = require('aws-sdk')
const sqs = new AWS.SQS({
region: 'us-east-1'
})
const sendMessage = async (msg, queueUrl) => {
try {
const params = {
MessageBody: JSON.stringify(msg),
QueueUrl: queueUrl
}
const res = await sqs.sendMessage(params).promise()
return res
} catch (err) {
console.log('Error:', `failed to send message ${err}`)
throw new Error(err)
}
}
export { sendMessage as default }
在上面的代码中,我期待 Success
作为 res 中的返回值
输出
FAIL tests/sendMessage.test.js
● Console
console.log api/sqs/producer/index.js:16
Error: failed to send message UnknownEndpoint: Inaccessible host: `testurl'. This service may not b
e available in the `us-east-1' region.
● Test case for SQS SendMessage › should return the UserEvent
UnknownEndpoint: Inaccessible host: `testurl'. This service may not be available in the `us-east-1' r
egion.
原文由 FLASH 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是解决方案,您不需要
aws-sdk-mock
模块,您可以自己模拟aws-sdk
。index.ts
:index.spec.ts
:100% 覆盖率的单元测试结果:
这是完整的演示: https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/57585620