Jest Integration Test for serverless-aws-lambda
npm install serverless-aws-lambda-jest> Jest Integration Test for serverless-aws-lambda
- serverless-aws-lambda
- Jest
``bash`
yarn add -D serverless-aws-lambda-jestor
npm install -D serverless-aws-lambda-jest
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)jest.it.config.js
- Do not write your Integration Tests inside the same (sub) directory as your Lambda handlers
- Specify your Integrations Test root directory inside your 's rootDir.
- Set jestPlugin at the end of your defineConfig plugins array.
---
use serverless-aws-lambda's defineConfig to import this plugin
`js
// 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,
},
}),
],
});
`
The plugin exposes multiple global functions to wait for handler async invokation responses.
- sqsResponse
- snsResponse
- s3Response
- dynamoResponse
Simple example of implementation for a SQS event:
`tshttp://localhost:${process.env.LOCAL_PORT}/@sqs
import { SQSClient, SendMessageCommand } from "@aws-sdk/client-sqs";
const client = new SQSClient({
region: "eu-west-3",
endpoint: ,`
});
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.
Supported events
- Application Load Balancer (alb)
- API Gateway (http, httpApi)
- DynamoDB Streams
- S3
- SNS
- SQS
- serverless-aws-lambda's LOCAL_PORT env variable is injected into process.env of your test files which could be used to make offline request against the local server.oneshot
- Set option to true to launch Integrations Tests and exit the process after the first test sequence. Node Process will exit with 0 code, or 1 if Jest tests fails or coverage threshold is not met.{delay: secondes}
- It is also possible to delay exit process by passing to oneshot.coverage` option to generate coverage result json file and svg badge.
- use
- See an example project