【发布时间】:2020-12-28 02:17:01
【问题描述】:
在弄清楚如何对此进行单元测试时遇到了麻烦,我接近但无法完全解决它。
函数如下:
receiveMessage(callback: Function): any {
this.sqs.receiveMessage(
this.params,
(err: AWSError, data: ReceiveMessageResult) => callback(err, data)
);
}
在测试中,我设置了初始 AWS 模拟并在测试中覆盖它:
jest.mock('aws-sdk', () => {
const SQSMocked = {
receiveMessage: jest.fn().mockReturnThis()
};
return {
SQS: jest.fn(() => SQSMocked),
config: {
update: jest.fn(() => {
return { region: getConfig().region };
})
}
};
});
const sqs = new AWS.SQS({
region: 'us-east-1'
});
那么实际的测试就到这里了。我认为我在覆盖 aws sdk 上的 receiveMessage 时出错了。
it('checks the callback is called', (done) => {
const callback = (err: AWSError, data: ReceiveMessageResult) => {
console.log('called');
done();
};
// how to call the callback on the mock???
sqs.receiveMessage = jest.fn().mockReturnValue(callback);
sqsQueue.receiveMessage(callback);
expect(callback).toHaveBeenCalled();
});
我尝试了许多覆盖 aws sdk 的组合,大多数时候是打字错误,但似乎不太明白如何模拟函数回调。
有什么想法吗?
【问题讨论】:
-
你是如何初始化
this.sqs的?请提供最少、完整的代码
标签: typescript unit-testing jestjs aws-sdk aws-cli