Package Exports
- vitest-mms/globalSetup
- vitest-mms/mongodb/setupFile
- vitest-mms/mongodb/test
- vitest-mms/mongoose/setupFile
- vitest-mms/setupFile
- vitest-mms/test
Readme
vitest-mms 
mongodb-memory-server integration for vitest
mongodbdriver support.mongoosesupport.- 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-serverUsage with mongodb
[!IMPORTANT] You need to install
mongodbseparately.
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"],
},
});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);
});mongoClientis the connected MongoClient instance (seeimport("mongodb").MongoClient)dbis a random database name connected to the mongodb-memory-server instance (seeimport("mongodb").Db)
Usage with mongoose
[!IMPORTANT] You need to install
mongooseseparately.
vitest.config.mjs:
import { defineConfig } from "vitest/config";
export default defineConfig({
test: {
globalSetup: ["vitest-mms/globalSetup"],
setupFile: ["vitest-mms/mongoose/setupFile"],
},
});tsconfig.json:
{
"compilerOptions": {
"types": ["vitest-mms/mongoose/setupFile"]
}
}index.test.js:
test("my test", async ({ mongoose }) => {
mongoose.connection.db; // use db
const User = mongoose.model("User", new mongoose.Schema({ name: String }));
await User.create({ name: "John" });
expect(await User.countDocuments()).toBe(1);
});mongooseis the mongoose instance returned bymongoose.connect
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";
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