vitest-mongodb
Run your tests with Vitest and MongoDB Memory server.
Installation
yarn add -D vitest-mongodb
npm i -D vitest-mongodb
pnpm i -D vitest-mongodb
Usage
An example project can be found at /example
.
- Create a setup file.
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.
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();
});
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
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();
});
TypeScript
To get __MONGO_URI__
on your globalThis
object, add the follow file:
declare var __MONGO_URI__: string;
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.