@karmaniverous/mock-db v0.3.3
MockDb
The MockDb
class wires up a local JSON data store to replicate some key behaviors of DynamoDB for testing purposes.
MockDb is not a database in any meaningful sense, nor does it express anything like the full range of DynamoDB's features! It's just a limited test fixture, to which I add features as I need them.
The current feature set includes:
query
&querySync
- Depending on the options passed, these methods behave like either a DynamoDBquery
orscan
operation, including limited return sets with page keys.All methods exist in synchronous & asynchronous versions. Async methods run with a normally-distributed delay.
That's it!
MockDB depends on entity-tools
to define entity properties, indexable properties, and records. This package also provides the sort
function used internally by MockDb.query
.
Usage
You'll almost certainly run MockDb as a dev dependency. To install:
npm i -D @karmaniverous/mock-db
Then you can run:
import type { Entity } from '@karmaniverous/entity-tools';
import { MockDb, type QueryOptions } from '.';
// Specify the data type.
interface User extends Entity {
partition: string;
id: number;
name: string;
}
// Create some data.
const users: User[] = [
{ partition: 'a', id: 4, name: 'Alice' },
{ partition: 'b', id: 3, name: 'Bob' },
{ partition: 'a', id: 2, name: 'Charlie' },
{ partition: 'a', id: 1, name: 'Dave' },
];
// Create a new instance of MockDb.
const mockDb = new MockDb(users);
// Perform a "scan" synchronously across partitions with a filter.
const scanResult = mockDb.querySync({
filter: ({ id }) => id > 2,
sortOrder: [{ property: 'id' }],
});
console.log(scanResult);
// {
// count: 2,
// items: [
// { partition: 'b', id: 2, name: 'Bob' },
// { partition: 'a', id: 3, name: 'Alice' }
// ],
// pageKey: undefined
// }
// Perform an asynchronous, paged, sorted "query" within a partition.
const queryOptions: QueryOptions<User> = {
hashKey: 'partition',
hashValue: 'a',
indexComponents: ['partition', 'id'],
limit: 2,
sortOrder: [{ property: 'id' }],
};
let queryResult = await mockDb.query(queryOptions, 100);
console.log(queryResult);
// {
// count: 2,
// items: [
// { partition: 'a', id: 1, name: 'Dave' },
// { partition: 'a', id: 2, name: 'Charlie' }
// ],
// pageKey: { partition: 'a', id: 2 }
// }
// Use the returned pageKey to get the next page.
queryResult = await mockDb.query(
{
...queryOptions,
pageKey: queryResult.pageKey,
},
100,
);
console.log(queryResult);
// {
// count: 1,
// items: [ { partition: 'a', id: 4, name: 'Alice' } ],
// pageKey: undefined
// }
See the API Documentation for more details.
Got questions or suggestions? Start a discussion!
Built for you with ❤️ on Bali! Find more great tools & templates on my GitHub Profile.
9 months ago
9 months ago
9 months ago
9 months ago
9 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
10 months ago