Estoy tratando de probar mi función lambda localmente, usando mocha, chai y chai-as-promised en lo que respecta a async. Mi lambda usa el formato AWS context.succeed para devolver el resultado, no la devolución de llamada, y necesito mantenerlo así. Tengo una prueba a continuación, que devuelve un código de estado de 200, pero cuando espero que sea 400, aún pasa la prueba (falso positivo). No se muestran los registros colocados en la función de éxito del contexto personalizado, lo que indica que no se está golpeando, o mi comprensión de cómo funciona context.succeed es un poco incorrecta. Cualquier sugerencia sería muy apreciada.
Nota: la lambda funciona bien, la prueba es todo lo que tengo un problema.
Aquí está el código simple que tengo hasta ahora. Básicamente, llamo a mi función lambda, paso un evento y contexto como se esperaba. Cuando se llama a context.succeed, debe probar el resultado pasado al contexto.
'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'); }, }); }); });Te sugiero que leas este artículo:
Lo que explica cómo estos muchachos están probando la unidad de sus lambda.
Esto es lo que haría:
'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); } }); });Terminé yendo con lambda-tester: https://github.com/vandium-io/lambda-tester . El único inconveniente es que no es compatible con la versión Node> 4.3.2