我有以下课程:
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部署后效果很好。
现在,我有一个测试可以很好地模拟数据库调用。但是,由于构造函数有两个副作用:
这是我测试的开始(实际上调用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
答案 0 :(得分:0)
由于还没有答案......这会有效:
IS_LOCAL = true
然后在Connection类中检查它是否已设置并修改构造函数以跳过与DB的连接。
constructor() {
if (!process.env.IS_LOCAL) {
// Connect to DB
}
}
这样就不需要改变测试代码和实际的lambda函数了!连接类也可以在别处重复使用。