Run your tests with Vitest and MongoDB Memory server.
yarn add -D vitest-mongodb
npm i -D vitest-mongodb
pnpm i -D vitest-mongodb
An example project can be found at /example
.
- Create a setup file.
// ./setup/mongo-memory-server.ts
import { afterAll, beforeAll } from "vitest";
import { setup, teardown } from "vitest-mongodb";
beforeAll(async () => {
await setup();
});
afterAll(async () => {
await teardown();
});
- 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"],
},
});
- 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();
});
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, beforeAll } from "vitest";
import { setup, teardown } from "vitest-mongodb";
beforeAll(async () => {
await setup({ type: "replSet", serverOptions: { replSet: { count: 4 } } });
});
afterAll(async () => {
await teardown();
});
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.
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.