【问题标题】:What kind of test is it ? Nestjs是什么样的测试?巢穴
【发布时间】:2021-11-08 09:01:49
【问题描述】:

我正在尝试测试我的 nestjs 应用程序,但我不太确定我必须编写什么样的测试,我想测试我的服务,所以为了测试它,我使用了 nestjs 提供的函数 createTestingModule ,这是我的代码

 beforeAll(async () => {
const moduleRef = await Test.createTestingModule({
  providers: [DeliveryManService],
  imports: [
    TypeOrmModule.forFeature([UserRepository, DeliveryManRepository]),
    PostgresProviderModule,
  ],
}).compile();

service = moduleRef.get<DeliveryManService>(DeliveryManService);

});

但不幸的是,我正在观看其他人的编码,而不是直接使用 typeorm 存储库,他们正在使用模拟来做这些事情,所以我想......

我的测试没用吗?

我应该只使用 mock 而不是 typeorm 提供程序来编写测试吗?

我写了什么样的测试?

编辑这些是我的测试:

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

  it('should save and return a new delivery man', async () => {
    const deliveryMan = await service.preRegister(preRegister);
    expect(deliveryMan).toBeDefined();
    expect(deliveryMan.id).toBeDefined();
  });

  it('should return an array of delivery man', async () => {
    const deliveryMans = await service.findAll({ page: 1, limit: 100 });
    expect(deliveryMans).toBeDefined();
    expect(deliveryMans).toBeInstanceOf(Array);
    expect(deliveryMans.length).toBeGreaterThanOrEqual(1);
  });

【问题讨论】:

  • 以上是一个测试设置,但您并没有显示您的测试实际在做什么。你在这里实际测试什么?看起来像是集成测试的开始,但没有更多信息就很难判断。
  • 很抱歉,我现在就修改。
  • 那些测试实际上是直接调用我的测试数据库,而不是调用模拟或类似的东西

标签: testing jestjs integration-testing nestjs typeorm


【解决方案1】:

如果您有测试实际上与您的数据库对话,那么您就有一个集成测试,即测试您的服务类和数据库之间的集成。通常您要小心这些数量,因为它们需要数据库并且通常会修改该数据库中的数据,这意味着如果配置不正确,您最终可能会修改错误的数据。

单元测试最终会模拟数据库as shown in this repo here。这些测试通常最多只需要几秒钟,而集成测试可能需要更长的时间,因为必须通过线路发送数据才能连接到数据库并检索查询结果。

【讨论】:

  • 谢谢你,杰伊,你的回答会有很大帮助:D
猜你喜欢
  • 2023-03-26
  • 2020-07-20
  • 2020-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 2020-06-10
  • 1970-01-01
相关资源
最近更新 更多