节点单元使用context.succeed()测试AWS Lambda函数

时间:2017-04-25 14:39:28

标签: node.js unit-testing amazon-web-services mocha aws-lambda

我正在尝试在本地测试我的lambda函数,使用mocha,chai和chai-as-promise,其中涉及async。我的lambda使用AWS context.succeed格式来返回结果,而不是回调,我需要保持这种方式。我在下面有一个测试,它返回200的状态代码,但是当我预计它是400时,它仍然通过测试(误报)。放置在自定义上下文中的任何日志都没有显示,表明它没有被击中,或者我对context.succeed如何工作的理解有点偏。任何指针都会非常感激。

注意 - lambda工作正常,测试就是我遇到的问题。

这是我到目前为止的简单代码。基本上,我调用我的lambda函数,按预期传递事件和上下文。当调用context.succeed时,它应该测试传递给上下文的结果。

'use strict';
const myHandler = require('../lambdaHandler');
const chai = require('chai');
const expect = chai.expect;
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

describe('myHandler.handler should return with expected statusCodes', () => {

it('should return a 200 statusCode', () => {
  myHandler.handler(event, {
    succeed : (data) => {
      expect(data).to.eventually.have.property('statusCode');
      expect(data.statusCode).to.eventually.equal(400);
    },
    fail : (data) => {
      expect(data).to.have.property('statusCode');
    },
  });
});


});

4 个答案:

答案 0 :(得分:1)

我建议你阅读这篇文章:

https://blog.atomdata.io/serverless-applications-continuous-delivery-with-aws-lambda-and-api-gateway-part-1-unit-tests-e517aa1cd09e

这解释了这些人是如何对他们的lambda进行单元测试的。

答案 1 :(得分:0)

以下是我要做的事情:

'use strict';
const myHandler = require('../lambdaHandler');
const chai = require('chai');
const expect = chai.expect;
const chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

describe('myHandler.handler should return with expected statusCodes', () => {

it('should return a 200 statusCode', (done) => {
  try{ 
  myHandler.handler(event, {
    succeed : (data) => {
      expect(data).to.eventually.have.property('statusCode');
      expect(data.statusCode).to.eventually.equal(400);
      done();
    },
    fail : (data) => {
      expect(data).to.have.property('statusCode');
      done();
    },
  });
  } catch(err){
    done(err.message);
  }
});


});

答案 2 :(得分:0)

我最终选择了lambda-tester:https://github.com/vandium-io/lambda-tester。唯一的缺点是它不支持Node版本> 4.3.2

答案 3 :(得分:0)

以下是我使用lambda-localjest测试从DynamoDB(local)获取数据的函数所做的示例:

{% set foo, bar = 'foo', 'bar' %}

{% set t1Tot,t2Tot,t3Tot   = 0,0,0 /* ... */ %}