@shelf/jest-mongodb

    2.1.0 • Public • Published

    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 separate database for each jest worker pass the useSharedDBForAllJestWorkers: false (doesn't create process.env variable when using this option):

    module.exports = {
      mongodbMemoryServerOptions: {
        binary: {
          skipMD5: true,
        },
        autoStart: false,
        instance: {},
      },
    
      useSharedDBForAllJestWorkers: 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,
      },
    };

    To use another uri environment variable name you must set mongoURLEnvName field:

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

    3. Configure MongoDB client

    Library sets the process.env.MONGO_URL for your convenience, but using of global.__MONGO_URI__ is preferable as it works with useSharedDBForAllJestWorkers: false

    const {MongoClient} = require('mongodb');
    
    describe('insert', () => {
      let connection;
      let db;
    
      beforeAll(async () => {
        connection = await MongoClient.connect(global.__MONGO_URI__, {
          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

    Install

    npm i @shelf/jest-mongodb

    DownloadsWeekly Downloads

    70,336

    Version

    2.1.0

    License

    MIT

    Unpacked Size

    16.2 kB

    Total Files

    22

    Last publish

    Collaborators

    • bogdan.kyba
    • dima-bond
    • maksym.hayovets
    • oles.zadorozhnyy
    • ss1l
    • maks.kolesnyk
    • gemshelf
    • d-mii-
    • hartzler
    • tarasdyksan
    • andrii_butsa
    • nazarko_suv
    • bogdan.kolesnyk
    • vitaliishcherban
    • vladgolubev
    • marianna-milovanova
    • hmelenok
    • knupman
    • maaraanas
    • terret
    • chapelskyi.slavik
    • ahavrysh
    • pihorb
    • irynah
    • diana.kryskuv
    • andy.raven
    • rafler
    • mykola.chepkyi
    • sskalp88
    • demiansua
    • yuriil
    • ktv18
    • drews_abuse
    • rostyslav-horytskyi
    • whodeen