Need help with jest-mongodb?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

shelfio
335 Stars 54 Forks MIT License 477 Commits 29 Opened issues

Description

Jest preset for MongoDB in-memory server

Services available

!
?

Need anything else?

Contributors list

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

6. Jest watch mode gotcha

This package creates the file

globalConfig.json
in the project root, when using jest
--watch
flag, changes to
globalConfig.json
can cause an infinite loop

In order to avoid this unwanted behaviour, add

globalConfig
to ignored files in watch mode in the Jest configuation
// jest.config.js
module.exports = {
  watchPathIgnorePatterns: ['globalConfig'],
}

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.