mongoms.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { MongoMemoryServer } from 'mongodb-memory-server-core';
  2. import mongoose from 'mongoose';
  3. import { mongoOptions } from '~/server/util/mongoose-utils';
  4. let mongoServer: MongoMemoryServer | undefined;
  5. beforeAll(async () => {
  6. // Use external MongoDB if MONGO_URI is provided (e.g., in CI with GitHub Actions services)
  7. if (process.env.MONGO_URI) {
  8. // Generate unique database name for each test worker to avoid conflicts in parallel execution
  9. // VITEST_POOL_ID is provided by Vitest (e.g., "1", "2", "3"...)
  10. const workerId = process.env.VITEST_POOL_ID || '1';
  11. const dbName = `growi_test_${workerId}`;
  12. // Parse base URI and append database name
  13. const baseUri = process.env.MONGO_URI.replace(/\/[^/]*$/, '');
  14. const mongoUri = `${baseUri}/${dbName}`;
  15. // biome-ignore lint/suspicious/noConsole: Allow logging
  16. console.log(`Using external MongoDB at ${mongoUri} (worker: ${workerId})`);
  17. await mongoose.connect(mongoUri, mongoOptions);
  18. return;
  19. }
  20. // Use MongoMemoryServer for local development
  21. // set debug flag
  22. process.env.MONGOMS_DEBUG = process.env.VITE_MONGOMS_DEBUG;
  23. // set version
  24. mongoServer = await MongoMemoryServer.create({
  25. instance: {
  26. dbName: 'growi_test',
  27. },
  28. binary: {
  29. version: process.env.VITE_MONGOMS_VERSION,
  30. downloadDir: 'node_modules/.cache/mongodb-binaries',
  31. },
  32. });
  33. // biome-ignore lint/suspicious/noConsole: Allow logging
  34. console.log(`MongoMemoryServer is running on ${mongoServer.getUri()}`);
  35. await mongoose.connect(mongoServer.getUri(), mongoOptions);
  36. });
  37. afterAll(async () => {
  38. await mongoose.disconnect();
  39. // Stop MongoMemoryServer if it was created
  40. if (mongoServer) {
  41. await mongoServer.stop();
  42. }
  43. });