index.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { MongoMemoryServer } from 'mongodb-memory-server-core';
  2. import mongoose from 'mongoose';
  3. import { afterAll, beforeAll } from 'vitest';
  4. import { mongoOptions } from '~/server/util/mongoose-utils';
  5. import { getTestDbConfig } from './utils';
  6. let mongoServer: MongoMemoryServer | undefined;
  7. beforeAll(async () => {
  8. // Skip if already connected (setupFiles run per test file, but connection persists per worker)
  9. if (mongoose.connection.readyState === 1) {
  10. return;
  11. }
  12. const { workerId, dbName, mongoUri } = getTestDbConfig();
  13. // Use external MongoDB if MONGO_URI is provided (e.g., in CI with GitHub Actions services)
  14. if (mongoUri != null) {
  15. // biome-ignore lint/suspicious/noConsole: Allow logging
  16. console.log(`Using external MongoDB at ${mongoUri} (worker: ${workerId})`);
  17. // Migrations are run by migrate-mongo.ts setup file
  18. await mongoose.connect(mongoUri, mongoOptions);
  19. return;
  20. }
  21. // Use MongoMemoryServer for local development
  22. // set debug flag
  23. process.env.MONGOMS_DEBUG = process.env.VITE_MONGOMS_DEBUG;
  24. // set version
  25. mongoServer = await MongoMemoryServer.create({
  26. instance: {
  27. dbName,
  28. },
  29. binary: {
  30. version: process.env.VITE_MONGOMS_VERSION,
  31. downloadDir: 'node_modules/.cache/mongodb-binaries',
  32. },
  33. });
  34. // biome-ignore lint/suspicious/noConsole: Allow logging
  35. console.log(
  36. `MongoMemoryServer is running on ${mongoServer.getUri()} (worker: ${workerId})`,
  37. );
  38. await mongoose.connect(mongoServer.getUri(), mongoOptions);
  39. });
  40. afterAll(async () => {
  41. await mongoose.disconnect();
  42. // Stop MongoMemoryServer if it was created
  43. if (mongoServer) {
  44. await mongoServer.stop();
  45. }
  46. });