如何防止lambda功能测试中的构造函数调用



我有以下类:

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功能!连接类也可以在其他地方重新使用。

相关内容

  • 没有找到相关文章

最新更新