jest-mongodb

by shelfio

shelfio / jest-mongodb

Jest preset for MongoDB in-memory server

267 Stars 48 Forks Last release: about 2 months ago (v1.2.3) MIT License 459 Commits 11 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

jest-mongodb CircleCI npm (scoped)

Jest preset to run MongoDB memory server

Usage

0. Install

$ yarn add @shelf/jest-mongodb --dev

Make sure

mongodb
is installed in the project as well, as it's required as a peer dependency.

1. Create
jest.config.js

module.exports = {
  preset: '@shelf/jest-mongodb'
};

If you have a custom

jest.config.js
make sure you remove
testEnvironment
property, otherwise it will conflict with the preset.

2. Create
jest-mongodb-config.js

See mongodb-memory-server

module.exports = {
  mongodbMemoryServerOptions: {
    binary: {
      version: '4.0.3',
      skipMD5: true
    },
    autoStart: false,
    instance: {}
  }
};

To use the same database for all tests pass the config like this:

module.exports = {
  mongodbMemoryServerOptions: {
    binary: {
      version: '4.0.3',
      skipMD5: true
    },
    instance: {
      dbName: 'jest'
    },
    autoStart: false
  }
};

To use dynamic database name you must pass empty object for instance field

module.exports = {
  mongodbMemoryServerOptions: {
    binary: {
      version: '4.0.3',
      skipMD5: true
    },
    instance: {},
    autoStart: false
  }
};

3. Configure MongoDB client

Library sets the

process.env.MONGO_URL
for your convenience
const {MongoClient} = require('mongodb');

describe('insert', () => { let connection; let db;

beforeAll(async () => { connection = await MongoClient.connect(process.env.MONGO_URL, { useNewUrlParser: true, useUnifiedTopology: true }); db = await connection.db(); });

afterAll(async () => { await connection.close(); }); });

4. PROFIT! Write tests

it('should insert a doc into collection', async () => {
  const users = db.collection('users');

const mockUser = {_id: 'some-user-id', name: 'John'}; await users.insertOne(mockUser);

const insertedUser = await users.findOne({_id: 'some-user-id'}); expect(insertedUser).toEqual(mockUser); });

Cache MongoDB binary in CI by putting this folder to the list of cached paths:

./node_modules/.cache/mongodb-memory-server/mongodb-binaries

You can enable debug logs by setting environment variable

DEBUG=jest-mongodb:*

5. Clean collections before each test (optional)

beforeEach(async () => {
  await db.collection('COLLECTION_NAME').deleteMany({});
});

See this issue for discussion

See Also

Publish

$ git checkout master
$ yarn version
$ yarn publish
$ git push origin master --tags

License

MIT © Shelf

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.