From 2db8852985c074be0bbd345a6268f6bbf985a845 Mon Sep 17 00:00:00 2001 From: Vlad Holubiev Date: Mon, 15 Apr 2019 13:48:59 +0300 Subject: [PATCH] Add DynamoDB usage example (#8319) * 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 --- CHANGELOG.md | 1 + docs/DynamoDB.md | 81 +++++++++++++++++++++++++++++++++++++++++++ website/sidebars.json | 1 + 3 files changed, 83 insertions(+) create mode 100644 docs/DynamoDB.md diff --git a/CHANGELOG.md b/CHANGELOG.md index bfaeb5f5fb33..e2c8b00c83df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/docs/DynamoDB.md b/docs/DynamoDB.md new file mode 100644 index 000000000000..ed3d36febae9 --- /dev/null +++ b/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. diff --git a/website/sidebars.json b/website/sidebars.json index c8fb58c869e7..de65d7d26007 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -20,6 +20,7 @@ "webpack", "puppeteer", "mongodb", + "dynamodb", "tutorial-jquery", "watch-plugins", "migration-guide",