10

GitHub - ec965/vitest-mongodb: Run your tests with Vitest and MongoDB Memory ser...

 2 years ago
source link: https://github.com/ec965/vitest-mongodb
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

vitest-mongodb

Run your tests with Vitest and MongoDB Memory server.

Usage

An example project can be found at /example.

  1. Create a setup file.
// ./setup/mongo-memory-server.ts
import { afterAll } from "vitest";
import { setup, teardown } from "vitest-mongodb";

beforeAll(async () => {
  await setup();
});

afterAll(async () => {
  await teardown();
});
  1. 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"],
  },
});
  1. 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

// ./setup/mongo-memory-server.ts
import { afterAll } 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:

// test/global.d.ts
declare var __MONGO_URI__: string;

Comparison to jest-mongodb

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.

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK