Skip to content

Commit

Permalink
Add DynamoDB usage example (#8319)
Browse files Browse the repository at this point in the history
* docs: add dynamodb page to website sidebar

* docs: add DynamoDB usage tutorial

* docs: mention new dynamodb guide in CHANGELOG.md

* style: apply prettier style suggestions
  • Loading branch information
vladgolubev authored and SimenB committed Apr 15, 2019
1 parent ac8c345 commit 2db8852
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -6,6 +6,7 @@
- `[jest-cli]` Update `--forceExit` and "did not exit for one second" message colors ([#8329](https://github.com/facebook/jest/pull/8329))
- `[expect]` Improve report when matcher fails, part 16 ([#8306](https://github.com/facebook/jest/pull/8306))
- `[jest-runner]` Pass docblock pragmas to TestEnvironment constructor ([#8320](https://github.com/facebook/jest/pull/8320))
- `[docs]` Add DynamoDB guide ([#8319](https://github.com/facebook/jest/pull/8319))

### Fixes

Expand Down
81 changes: 81 additions & 0 deletions docs/DynamoDB.md
@@ -0,0 +1,81 @@
---
id: dynamodb
title: Using with DynamoDB
---

With the [Global Setup/Teardown](Configuration.md#globalsetup-string) and [Async Test Environment](Configuration.md#testenvironment-string) APIs, Jest can work smoothly with [DynamoDB](https://aws.amazon.com/dynamodb/).

## Use jest-dynamodb Preset

[Jest DynamoDB](https://github.com/shelfio/jest-dynamodb) provides all required configuration to run your tests using DynamoDB.

1. First install `@shelf/jest-dynamodb`

```
yarn add @shelf/jest-dynamodb --dev
```

2. Specify preset in your Jest configuration:

```json
{
"preset": "@shelf/jest-dynamodb"
}
```

3. Create `jest-dynamodb-config.js` and define DynamoDB tables

See [Create Table API](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#createTable-property)

```js
module.exports = {
tables: [
{
TableName: `files`,
KeySchema: [{AttributeName: 'id', KeyType: 'HASH'}],
AttributeDefinitions: [{AttributeName: 'id', AttributeType: 'S'}],
ProvisionedThroughput: {ReadCapacityUnits: 1, WriteCapacityUnits: 1},
},
// etc
],
};
```

4. Configure DynamoDB client

```js
const {DocumentClient} = require('aws-sdk/clients/dynamodb');

const isTest = process.env.JEST_WORKER_ID;
const config = {
convertEmptyValues: true,
...(isTest && {
endpoint: 'localhost:8000',
sslEnabled: false,
region: 'local-env',
}),
};

const ddb = new DocumentClient(config);
```

5. Write tests

```js
it('should insert item into table', async () => {
await ddb
.put({TableName: 'files', Item: {id: '1', hello: 'world'}})
.promise();

const {Item} = await ddb.get({TableName: 'files', Key: {id: '1'}}).promise();

expect(Item).toEqual({
id: '1',
hello: 'world',
});
});
```

There's no need to load any dependencies.

See [documentation](https://github.com/shelfio/jest-dynamodb) for details.
1 change: 1 addition & 0 deletions website/sidebars.json
Expand Up @@ -20,6 +20,7 @@
"webpack",
"puppeteer",
"mongodb",
"dynamodb",
"tutorial-jquery",
"watch-plugins",
"migration-guide",
Expand Down

0 comments on commit 2db8852

Please sign in to comment.