如何防止Lambda函数测试中的构造函数调用?

时间:2018-02-22 17:03:20

标签: javascript lambda sinon serverless

我有以下课程:

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(运行测试时不需要和不需要)
  • 建立连接后,测试等待连接关闭

这是我测试的开始(实际上调用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

运行我的测试

1 个答案:

答案 0 :(得分:0)

由于还没有答案......这会有效:

  • 添加环境变量:IS_LOCAL = true

然后在Connection类中检查它是否已设置并修改构造函数以跳过与DB的连接。

constructor() {
    if (!process.env.IS_LOCAL) {
        // Connect to DB
    }
}

这样就不需要改变测试代码和实际的lambda函数了!连接类也可以在别处重复使用。