vitest-mms
mongodb-memory-server integration for vitest
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
Setup:
Add vitest-mms/globalSetup
to globalSetup in your vitest config
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
globalSetup: ["vitest-mms/globalSetup"],
},
});
Extending the global context
To make it available in the global context for every test you also need to add the vitest-mms/setupFile
to your vitest config
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
globalSetup: ["vitest-mms/globalSetup"],
setupFiles: ["vitest-mms/setupFile"],
},
});
This will make it available in the tests context globally
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
)
For typescript support add the following to your tsconfig.json
{
"compilerOptions": {
"types": ["vitest-mms/setupFile"]
}
}
Alternative extending locally with test.extend
vitest.config.mjs:
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
globalSetup: ["vitest-mms/globalSetup"],
},
});
index.test.js:
import { mssTest as test } from "vitest-mms/test";
test("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
vitest.config.mjs:
import { defineConfig } from "vitest/config";
import AutoImport from "unplugin-auto-import/vite";
export default defineConfig({
plugins: [
AutoImport({
imports: [{ "vitest-mms/test": [["mmsTest", "test"]] }],
}),
],
test: {
globalSetup: ["vitest-mms/globalSetup"],
},
});
Then use it directly without having to import mmsTest
:
test("my test", async ({ db, mongoClient }) => {
const users = db.collection("users");
users.insertOne({ name: "John" });
expect(await users.countDocuments()).toBe(1);
});
Usage with mongoose
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
globalSetup: ["vitest-mms/globalSetup"],
setupFile: ["vitest-mms/mongoose/setupFile"],
},
});
{
"compilerOptions": {
"types": ["vitest-mms/mongoose/setupFile"]
}
}
test("my test", async ({ mongoose }) => {
mongoose.connection.db;
const User = mongoose.model("User", new mongoose.Schema({ name: String }));
await User.create({ name: "John" });
expect(await User.countDocuments()).toBe(1);
});