我想在本地測試我的lambda函數,使用mocha,chai和chai-as-promised來關聯異步。我的lambda使用AWS context.succeed格式來返回結果,而不是回調,我需要保持這種方式。我在下面有一個測試,它返回一個200的狀態代碼,但是當我期望它是400時,它仍然通過測試(誤報)。任何放置在自定義上下文成功函數中的日誌,都不顯示,表明它沒有被擊中,或者我對context.succeed的工作方式有點了解。任何指針將不勝感激。節點單元測試使用context.succeed()的AWS Lambda函數
注 - 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');
},
});
});
});
看起來像一個異步問題。在您的it-block回調中添加'done'作爲函數arg。調用'()完成後'你期望的陳述或'做(data.statusCode)'在你失敗的處理程序 – LostJon
這絕對是一個異步的問題,但是這就是爲什麼我用柴作爲-承諾。成功或失敗都不會受到影響,因此完成並不會產生任何影響。我最終通過使用'lambda-tester'來取得我的測試結果。唯一的缺點是,只支持Node 4.3.2。 – jmcgui05
而不是使用chai-as-promise,我通常只是將'done'傳遞給回調函數。代碼往往會變得更長一些,但感覺更自然 – LostJon