dynafixtures
Version:
Fixtures for DynamoDB
60 lines (45 loc) • 2.08 kB
Markdown
# Dynafixtures
Fixtures for DynamoDB using DynamoDB Local.
This package is meant to quickly implement fixtures for DynamoDB. Particularly handy if you want to unit test code that requires AWS DynamoDB.
## Setup and teardown
Make sure you have DynamoDB running locally. This is as easy as downloading a file and then running a command. See the [AWS documentation](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html#Tools.DynamoDBLocal.DownloadingAndRunning) for more info.
Install the package:
```javascript
npm install --save-dev dynafixtures
```
Create fixtures files for tables and records. See the test folder for examples (there are just JSONs for the correct DynamoDB API functions). Dynafixtures uses the `createTable` and `batchWriteItem` API calls of the [AWS DynamoDB API](http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html).
The easiest way to start is to use the `setup()` and `teardown()` functions. `setup()` is shorthand for `initialize()` and `fixtures()`, e.g. create tables and records in one go.
```javascript
var tables = process.cwd() + '/test_tables.json';
var fixtures = [
process.cwd() + '/Forum_fixture.json',
process.cwd() + '/fixture2.json'
];
var port = 4567; // Defaults to 4567 if `typeof port` is not a number
dynafixtures.setup(tables, fixtures, port, function(err){
if (err) {
//Handle error
}
);
```
When the tests are completed, run:
```javascript
dynafixtures.teardown(function(err){
if (err) {
// Handle error
}
});
```
## Using DynamoDB during tests
Between setup and teardown (which you should do before and after each test, fits nicely in assert's `before` and `after` functions or). you can access the DynamoDB on your machine using this snippet:
```javascript
var aws = require('aws-sdk');
var db = new aws.DynamoDB({
'accessKeyId': 'a',
'secretAccessKey':'b',
'endpoint':'http://localhost:4567', // Your port here
'region': 'eu-west-1'
});
// Now you can do DynamoDB calls using db.scan() or whatever.
// ...
```