0.2.5 • Published 11 months ago

vitest-mms v0.2.5

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

vitest-mms NPM Version

mongodb-memory-server integration for vitest

  • mongodb driver support.
  • mongoose support.
  • clear database between each test
  • ootb ready to start writting tests

If you need support for other ORMs, please open an issue or a pull request. See ./tests for more examples.

!TIP You can also connect to the mongodb memory server directly by using a connection uri const connectionUri = inject("MONGO_URI");

Installation

npm install -D vitest-mms mongodb-memory-server
yarn add -D vitest-mms mongodb-memory-server
pnpm add -D vitest-mms mongodb-memory-server

Usage with mongodb

!IMPORTANT You need to install mongodb separately.

To make it available in the global context for every test you need to add a globalSetup and setupFile in your vitest config:

vitest.config.mjs:

import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    globalSetup: ["vitest-mms/globalSetup"],
    setupFiles: ["vitest-mms/mongodb/setupFile"],
    vitestMms: {
      // optional configuration
      mongodbMemoryServer: {
        // these options are passed to MongoMemoryServer.create(), see https://typegoose.github.io/mongodb-memory-server/docs/guides/quick-start-guide#normal-server
      },
    },
  },
});

tsconfig.json:

{
  "compilerOptions": {
    "types": ["vitest-mms/mongodb/setupFile"]
  }
}

index.test.js:

import { test } from "vitest";

test("my test", async ({ db, mongoClient }) => {
  const users = db.collection("users");
  users.insertOne({ name: "John" });
  expect(await users.countDocuments()).toBe(1);
});
  • mongoClient is the connected MongoClient instance (see import("mongodb").MongoClient)
  • db is a random database name connected to the mongodb-memory-server instance (see import("mongodb").Db)

Usage with mongoose

!IMPORTANT You need to install mongoose separately.

vitest.config.mjs:

import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    globalSetup: ["vitest-mms/globalSetup"],
    setupFile: ["vitest-mms/mongoose/setupFile"],
    vitestMms: {
      // optional configuration
      mongodbMemoryServerOptions: {
        // these options are passed to MongoMemoryServer.create(), see https://typegoose.github.io/mongodb-memory-server/docs/guides/quick-start-guide#normal-server
      },
    },
  },
});

tsconfig.json:

{
  "compilerOptions": {
    "types": ["vitest-mms/mongoose/setupFile"]
  }
}

index.test.js:

test("my test", async ({ connection }) => {
  const User = connection.model("User", new Schema({ name: String }));
  await User.create({ name: "John" });
  expect(await User.countDocuments()).toBe(1);
});

Using ReplSet

See https://typegoose.github.io/mongodb-memory-server/docs/guides/quick-start-guide#replicaset

vitest.config.mjs:

import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    globalSetup: ["vitest-mms/globalSetupReplSet"],
    setupFiles: ["vitest-mms/mongodb/setupFile"],
    vitestMms: {
      mongodbMemoryServerOptions: {
        replSet: { count: 4 },
      },
    },
  },
});

Alternative using a extended test context

If you want to avoid the overhead of vitest-mms on every test and instead just want to use it for a subset of your tests, you can use vitest-mms/*/test instead:

vitest.config.mjs:

import { defineConfig } from "vitest/config";

export default defineConfig({
  test: {
    globalSetup: ["vitest-mms/globalSetup"],
  },
});

index.test.js:

// using the extended test context
import { mssTest } from "vitest-mms/mongodb/test";
// or import { mssTest } from "vitest-mms/mongoose/test";

mssTest("my test", async ({ db, mongoClient }) => {
  const users = db.collection("users");
  users.insertOne({ name: "John" });
  expect(await users.countDocuments()).toBe(1);
});

See https://vitest.dev/guide/test-context.html#extend-test-context for more information

0.1.10

12 months ago

0.1.11

12 months ago

0.1.12

12 months ago

0.2.1

12 months ago

0.2.0

12 months ago

0.1.8

12 months ago

0.1.7

1 year ago

0.1.9

12 months ago

0.2.3

11 months ago

0.2.2

12 months ago

0.2.5

11 months ago

0.1.6

1 year ago

0.2.4

11 months ago

0.1.2

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago

0.1.5

1 year ago

0.1.1

2 years ago

0.1.0

2 years ago