Jest preset and helper functions for easily running tests using DynamoDB local
See the tests in this repo for example usage.
const {
getDynamodbClient,
getDynamodbDocumentClient,
createTable,
deleteTable,
} = require('jest-dynamodb-local-docker');
describe('test', () => {
beforeAll(async () => {
await createTable(/* table properties */);
});
afterAll(async () => {
await deleteTable(/* { tableName: 'table name' } */);
});
it('should work', async () => {
const ddb = getDynamodbDocumentClient(); // or use the standard DynamoDB Client with getDynamodbClient()
await ddb.put(/* put request */);
await expect(
ddb.get(/* get request */)
).toStrictEqual(/* the item we just wrote */);
});
});
Add the jest-dynamodb-local-docker
preset to your Jest config. For example:
// in your package.json
{
"jest": {
"preset": "jest-dynamodb-local-docker"
}
}
global.createTable
- Creates a DynamoDB tableglobal.deleteTable
- Deletes a DynamoDB tableglobal.getDynamodbClient
andglobal.getDynamodbDocumentClient
- Get a standard DynamoDB Client or DynamoDB DocumentClient configured to use DynamoDB local
You may need to use the --runInBand
configuration flag when running your Jest tests. Otherwise, you can have multiple test workers trying to create/delete the same tables concurrently, which will probably lead to unexpected results.
Alternatively, if you ensure that each test uses a unique table, you should be able to run without --runInBand
.
We use debug for debugging logs. To turn on the debugging logs, run your tests like:
DEBUG="jest-dynamodb-local-docker" jest --runInBand