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");
npm install -D vitest-mms mongodb-memory-server
yarn add -D vitest-mms mongodb-memory-server
pnpm add -D vitest-mms mongodb-memory-server
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 (seeimport("mongodb").MongoClient
)db
is a random database name connected to the mongodb-memory-server instance (seeimport("mongodb").Db
)
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);
});
connection
is theConnection
instance returned bymongoose.createConnection
. See https://mongoosejs.com/docs/api/connection.html
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 },
},
},
},
});
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