【问题标题】:How to overrideProvider for NestJS/TypeORM如何覆盖 NestJS/TypeORM 的Provider
【发布时间】:2019-04-03 06:21:24
【问题描述】:

api.controller.ts

@Controller('api')
export class ApiController {
  constructor() {}

  @Post()
  @Transaction()
  async root(@Req() req: Request, @Res() res: Response, @TransactionManager() manager: EntityManager): Promise<void> {
    res.send(/* anything */);
  }
}

api.e2e-spec.ts

describe('API (e2e)', () => {
  let app: INestApplication;
  let connection: Connection;

  beforeAll(async () => {
    const module = await Test.createTestingModule({
      imports: [],
      controllers: [ApiController],
      providers: [],
    })
    .overrideProvider('Connection')
    .useValue(/** How to ??? */)
    .compile();
    app = module.createNestApplication();
    await app.init();
  });
});

结果是

[Nest] 35181   - 10/30/2018, 5:42:06 PM   [ExceptionHandler] 
Connection "default" was not found.
ConnectionNotFoundError: Connection "default" was not found.

在这种情况下,我只想使用 mock by test 来检查请求参数和响应值。 我想通过覆盖来禁用数据库连接。

【问题讨论】:

    标签: javascript node.js typescript nestjs typeorm


    【解决方案1】:

    假设您有某种模拟连接(例如,使用 jest.createMockInstance 参见https://www.npmjs.com/package/jest-create-mock-instance):

    api.e2e-spec.ts

    describe('API (e2e)', () => {
      let app: INestApplication;
      let connection: Mocked<Connection>;
    
      beforeAll(async () => {
        connection = createMockInstance(Connection);
        const module = await Test.createTestingModule({
          imports: [],
          controllers: [ApiController],
          providers: [],
        })
        .overrideProvider(Connection)
        .useValue(connection)
        .compile();
        app = module.createNestApplication();
        await app.init();
      });
    });
    

    【讨论】:

      猜你喜欢
      • 2021-04-23
      • 2021-12-28
      • 2020-12-09
      • 2020-03-18
      • 1970-01-01
      • 2022-01-05
      • 2021-04-23
      • 2021-09-08
      • 2022-08-05
      相关资源
      最近更新 更多