0.0.5 • Published 1 year ago

vitest-mongodb v0.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

vitest-mongodb

Run your tests with Vitest and MongoDB Memory server.

Installation

yarn add -D vitest-mongodb
npm i -D vitest-mongodb
pnpm add -D vitest-mongodb

Usage

An example project can be found at /example.

  1. Create a setup file.
// ./setup/mongo-memory-server.ts
import { afterAll } from "vitest";
import { setup, teardown } from "vitest-mongodb";

beforeAll(async () => {
  await setup();
});

afterAll(async () => {
  await teardown();
});
  1. Include that setup file in your Vitest config.
// vitest.config.ts
import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    setupFiles: ["./setup/mongo-memory-server.ts"],
  },
});
  1. Connect to the server in tests using the globalThis.__MONGO_URI__ global variable.
import { MongoClient } from "mongodb";
import { it, expect } from "vitest";
it("connects to mongodb", () => {
  expect(async () => {
    const client = new MongoClient(globalThis.__MONGO_URI__);
    try {
      const db = client.db("test");
      await db.command({ ping: 1 });
    } finally {
      await client.close();
    }
  }).not.toThrow();
});

Configuration

The setup function provides some configuration options.

Setup Options:

type Options =
  | {
      type?: "default";
      serverOptions?: Partial<MongoMemoryServerOpts>;
    }
  | {
      type: "replSet";
      serverOptions?: Partial<MongoMemoryReplSetOpts>;
    };

Example: create a ReplSet

// ./setup/mongo-memory-server.ts
import { afterAll } from "vitest";
import { setup, teardown } from "vitest-mongodb";

beforeAll(async () => {
  await setup({ type: "replSet", serverOptions: { replSet: { count: 4 } } });
});

afterAll(async () => {
  await teardown();
});

TypeScript

To get __MONGO_URI__ on your globalThis object, add the follow file:

// test/global.d.ts
declare var __MONGO_URI__: string;

Comparison to jest-mongodb

These two packages are fairly similar with slightly different configuration.

jest-mongodb Options

The following is how to get the desired effect as jest-mongodb options.

  • useSharedDBForAllJestWorkers: Run vitest with option --no-threads so that the setup file is only called once.
  • mongoURLEnvName: No plans to implement.