jest-dynalite
![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)
Enchaned unit testing, with a mock DynamoDB instance
jest-dynalite
is a fork of @shelf/jest-dynamodb
, and allows unit tests to execute real
queries against a local DynamoDB instance.
Behaviour
jest-dynalite
runs a dynalite instance per test runner, which means
test runners do not interfear.
jest-dynalite
clears tables between tests by default.
Installation
yarn add jest-dynalite -D
Config
In your package root, create a jest-dynalite-config.json
with the tables schemas,
and an optional basePort
to run dynalite on:
{
"tables": [
{
"TableName": "table",
"KeySchema": [{ "AttributeName": "id", "KeyType": "HASH" }],
"AttributeDefinitions": [{ "AttributeName": "id", "AttributeType": "S" }],
"ProvisionedThroughput": {
"ReadCapacityUnits": 1,
"WriteCapacityUnits": 1
}
}
],
"basePort": 8000
}
Update your sourcecode
const client = new DocumentClient({
...yourConfig,
...(process.env.MOCK_DYNAMODB_ENDPOINT && {
endpoint: process.env.MOCK_DYNAMODB_ENDPOINT,
sslEnabled: false,
region: "local"
})
});
process.env.MOCK_DYNAMODB_ENDPOINT
is unqiue to each test runner.
Jest config
Simple usage (preset)
jest.config.js
module.exports = {
...
preset: "jest-dynalite"
}
The simple preset config will use the config and clear tables
between tests by default.
This the recommended usage, unless you have custom setupFilesAfterEnv
or testEnvironment
set.
More advanced
setup.js
require("jest-dynalite/setupTables");
require("jest-dynalite/clearAfterEach");
jest.config.js
module.exports = {
...
testEnvironment: "jest-dynalite/environment",
setupFilesAfterEnv: ["./setup.js"]
}
This setup should be used if you want to override the default config of clearAfterEach
.
Most advanced
Specify the config dir
setupBeforeEnv.js
const { setup } = require("jest-dynalite");
setup(__dirname);
setupAfterEnv.js
const {
startDb,
stopDb,
createTables,
deleteTables
} = require("jest-dynalite");
beforeAll(startDb);
beforeEach(createTables);
afterEach(deleteTables);
afterAll(stopDb);
jest.config.js
module.exports = {
...
setupFiles: ["./setupBeforeEnv.js"],
setupFilesAfterEnv: ["./setupAfterEnv.js"]
}
This is by far the most complicated setup, but provides the ability to specifiy
and environment other than jest-dynalite
, and allows you to specify a config directory.
License
MIT