我正在尝试将Jest与基于NodeJS的AWS Lambda函数一起使用,以测试Lambda处理程序函数是否正在返回特定的状态代码。看来使用lambda-tester是实现这一目标的最简单方法。
handler.test.js
const handler = require('../src/handler.js');
const LambdaTester = require('lambda-tester');
test('should return a StatusCode of 400 due to requirement not being met', function (done) {
return LambdaTester(handler.run)
.event({})
.expectResult(result => {
expect(result.statusCode).toBe(400);
});
});
我认为这很简单,但是我得到的结果是
expect(received).toBe(expected) // Object.is equality
Expected: 400
Received: 500
7 | .event({})
8 | .expectResult(result => {
> 9 | expect(result.statusCode).toBe(400);
| ^
10 | });
11 | });
12 |
at tests/handler.test.js:9:33
at runVerifier (node_modules/lambda-tester/lib/runner.js:121:16)
at LambdaRunner.run (node_modules/lambda-tester/lib/runner.js:277:23)
如果我更改期望行以检查状态码为500,则会收到异步超时:
超时-在5000毫秒的超时时间内未调用异步回调 由jest.setTimeout.Timeout
指定
关于为什么它不起作用的任何想法吗?
lambda应该立即失败,因为传递的事件没有必需的属性,并且通过Postman测试时确实存在。
编辑: 此lambda是无服务器应用程序的一部分,可以在本地进行测试,我如何使用Jest做到这一点?
答案 0 :(得分:0)
我想得太深了,以下方法运行良好:
test('should return a StatusCode of 400 due to requirement not being met', async () => {
const event = {};
const context = {};
const result = await handler.run(event, context);
expect(result.statusCode).toBe(400)
expect(result.headers)
});