无服务器应用的测试、部署与监控
1. 模拟外部服务
在进行单元测试时,有时无法直接对 Lambda 函数进行测试,因为该函数可能与外部服务交互,如发送通知或在数据库中持久化数据,此时它不能被视为一个独立的逻辑单元。为了进行单元测试,需要通过模拟(Mocking)来移除这些依赖。
模拟是构建一个对象来模拟另一个对象的行为。例如,在测试处理信用卡支付的外部服务时,不希望处理诸如连接问题等意外事件,可创建一个模拟对象来模仿预期行为。
要实现模拟,需将业务逻辑与外部服务分离,这样有助于编写单元测试,降低对云服务的依赖,方便未来从一个云提供商迁移到另一个云提供商。
以下是一个业务逻辑和服务未清晰分离的代码示例:
const db = require('db');
const notifier = require('notifier');
module.exports.saveOrder = (event, context, callback) => {
db.saveOrder(event.order, (err) => {
if (err) {
callback(err);
} else {
notifier.sendEmail(event.email, callback);
}
});
};
该代码接收订单信息,将其保存到数据库,并发送电子邮件通知。存在两个主要问题:代码与输入绑定,且无法在不触发对数据库和通知服务请求的情况下对 Lambda 函数的内部内容进行单元测试。
无服务器应用测试与部署指南
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



