如何获取 NestFastifyApplication 对象的存储库或当前 TypeORM 实例?

Dan*_*lez 3 typeorm nestjs

我正在用 Nest 构建一个 API。对于 E2E 测试,我使用 Jest,在 beforeAll() 中,我使用 AppModule 中的 createNestApplication 实例化一个完整的 NestJS 应用程序:

    const module = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = module.createNestApplication<NestFastifyApplication>(
      new FastifyAdapter(),
    );
    await app.init();
Run Code Online (Sandbox Code Playgroud)

测试和验证是使用应用程序对象进行的。对于某些验证,以及在测试后从数据库中删除记录,我正在寻找一种方法从应用程序对象获取我的实体的存储库,或者至少是与数据库连接的 TypeOrm 实例。

查看该对象及其文档,我发现 NestJS 提供了一些从该对象中提取模块或提供程序的方法,但我还没有看到任何提取数据库连接实例的方法。我尝试使用这样的select 方法提取 TypeOrm 模块:

    const typeOrmModule = app.select(TypeOrmModule);
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:Nest 无法选择给定模块(当前上下文中不存在)

我不想在知道应用程序对象已经有一个连接的情况下生成与数据库的新连接。所以我想知道是否有一种方法可以提取该连接的实例或该对象内部的存储库。提前致谢

Dan*_*lez 5

杰伊·麦克唐尼尔的评论引导我找到了解决方案。getRepositoryToken(Entity)from 的方法@nestjs/typeorm返回实体存储库的令牌,通过它我可以获得我需要的存储库:

    const repo = app.get<Repository<Entity>>(getRepositoryToken(Entity)); 
Run Code Online (Sandbox Code Playgroud)