mongodb Nestjs中的mongo-inmemory-server抛出MongoNotConnectedError

drkbr07n  于 2023-10-16  发布在  Go
关注(0)|答案(2)|浏览(91)

考虑此测试文件

describe('UserRepository', () => {
  let userRepository: UserRepository;
  let module: TestingModule;

  beforeAll(async () => {
    module = await Test.createTestingModule({
      imports: [
        rootMongooseTestModule(),
        MongooseModule.forFeature([{ name: 'User', schema: UserSchema }]),
      ],
      providers: [UserRepository],
    }).compile();

    userRepository = module.get<UserRepository>(UserRepository);
  });

  it('should be defined', () => {
    expect(userRepository).toBeDefined();
  });

  it('can be created correctly', async () => {
    expect(
      async () =>
        await userRepository.create({
          firstName: 'Merlin',
          phone: '734214353',
          email: '[email protected]',
        }),
    ).not.toThrow();
  });

这也是在内存配置:

export const rootMongooseTestModule = (options: MongooseModuleOptions = {}) =>
  MongooseModule.forRootAsync({
    useFactory: async () => {
      mongod = await MongoMemoryServer.create();
      const mongoUri = mongod.getUri();
      console.log(mongoUri);             //==========> logs mongodb://127.0.0.1:37345/
      return {
        uri: mongoUri,
        ...options,
      };
    },
  });

export const closeInMongodConnection = async () => {
  await mongoose.disconnect();
  if (mongod) await mongod.stop();
};

“should be defined”测试正确通过,但第二个测试抛出此错误。
测试套件运行失败
MongoNotConnectedError:必须连接MongoClient才能执行此操作
所以在代码中注解,mongo uri是正确生成的,如何处理连接?

fwzugrvs

fwzugrvs1#

啊,把await放在rootMongooseTestModule()之前就解决了。

ogq8wdun

ogq8wdun2#

好吧,这很奇怪,我仍然不明白为什么会发生这种情况,所以我使用了通常的数据库。我一直在我的应用程序中使用的模块,内部测试和它的工作。也许这是未来游客应该尝试的。
(This应该已经在内部评论,但我没有足够的声誉,使一个,所以离开它作为答案)。

相关问题