进行测试
我有以下类:
class Connection {
constructor() {
Log.debug('Constructor called!');
// Connect to DB
}
}
module.exports = Connection;
此类用于lambda函数:
const Connection = require('Connection');
const connection = new Connection();
module.exports.endpoint = (event, context, callback) => {
// This will allow us to freeze open connections to a database
context.callbackWaitsForEmptyEventLoop = false;
// CODE HERE
}
一旦在本地部署或AWS部署后,上面的代码效果很好。
现在,我有一个测试,可以模拟DB调用正常。但是,由于构造函数,有两个副作用:
- 该测试实际上连接到DB(在运行测试时不需要且不需要(
- 建立连接的测试等待连接关闭
这是我的测试的开始(实际上称为Connection()
(
const mochaPlugin = require('serverless-mocha-plugin');
const { expect } = mochaPlugin.chai;
const sinon = require('sinon');
const wrapped = mochaPlugin.getWrapper('functionName', '/path/lambda.js', 'endpoint');
// Actual code starts below...
我确实尝试使用sinon
和存根构建器调用Connection
类,而没有运气,因为该行mochaPlugin.getWrapper...
创建了连接。
如何防止构造函数?三个是一种很好的固执方法吗?
其他信息:我正在使用sls invoke test
,因为还没有答案...这将起作用:
- 添加环境变量:
IS_LOCAL = true
然后在连接类中检查是否设置了它,并修改构造函数以跳过DB。
constructor() {
if (!process.env.IS_LOCAL) {
// Connect to DB
}
}
这样,就不需要更改测试的代码和实际的lambda功能!连接类也可以在其他地方重新使用。