1.2.5 • Published 2 years ago
serverless-aws-lambda-jest v1.2.5
Description
Jest Integration Test for serverless-aws-lambda
Requirements
Installation
yarn add -D serverless-aws-lambda-jest
# or
npm install -D serverless-aws-lambda-jestRecommendations
Some recommendations to speed up jest integration tests by avoiding double bundeling of your Lambdas by Jest and serverless-aws-lambda.
- Use separate jest config files for you Unit and Integration test, example:
jest.it.config.js(Integration Test)jest.ut.config.js(Unit Test)
- Do not write your Integration Tests inside the same (sub) directory as your Lambda handlers
- Specify your Integrations Test root directory inside your
jest.it.config.js'srootDir. - Set jestPlugin at the end of your defineConfig plugins array.
Usage
use serverless-aws-lambda's defineConfig to import this plugin
// config.js
const { defineConfig } = require("serverless-aws-lambda/defineConfig");
const { jestPlugin } = require("serverless-aws-lambda-jest");
module.exports = defineConfig({
plugins: [
jestPlugin({
configFile: "./jest.it.config.js",
oneshot: false,
coverage: {
outDir: "./coverage/",
json: true,
badge: true,
threshold: 60,
},
}),
],
});Testing async events
The plugin exposes multiple global functions to wait for handler async invokation responses.
Simple example of implementation for a SQS event:
import { SQSClient, SendMessageCommand } from "@aws-sdk/client-sqs";
const client = new SQSClient({
region: "eu-west-3",
endpoint: `http://localhost:${process.env.LOCAL_PORT}/@sqs`,
});
const cmd = new SendMessageCommand({
QueueUrl: "MyQueueName",
MessageBody: JSON.stringify({
hello: {
message: "world",
firstVisit: true,
},
}),
});
test("Single SQS", async () => {
const res = await client.send(cmd);
const handlerResponse = await sqsResponse(res.MessageId);
expect(handlerResponse.success).toBe(true);
});see more examples.
Coverage
Supported events
- Application Load Balancer (alb)
- API Gateway (http, httpApi)
- DynamoDB Streams
- S3
- SNS
- SQS
Notes
- serverless-aws-lambda's
LOCAL_PORTenv variable is injected into process.env of your test files which could be used to make offline request against the local server. - Set
oneshotoption totrueto launch Integrations Tests and exit the process after the first test sequence. Node Process will exit with0code, or1if Jest tests fails or coverage threshold is not met.- It is also possible to delay exit process by passing
{delay: secondes}tooneshot.
- It is also possible to delay exit process by passing
- use
coverageoption to generate coverage result json file and svg badge. - See an example project