Loopback-4 模拟注入

Loopback-4 Mocking injection

我正在使用 loopback-4,寻求帮助来模拟在 class 级别声明的 @inject。

请查找以下代码。

import { repository } from '@loopback/repository';
import { AddressRepository } from './address.repository';
import { Address } from './address.db.model';

export class AddressService {
    @repository(AddressRepository) private addressRepo: AddressRepository;

    async getAddresses(): Promise<Address[]> {
      return this.addressRepo.find();
    }
}

我正在尝试通过 @loopback/testlab.StubbedInstanceWithSinonAccessor 进行模拟,但它不起作用,因为我没有使用构造函数注入。尝试了以下方法,但它不允许。

let addressRepo: StubbedInstanceWithSinonAccessor<AddressRepository>;
const addressService = new AddressService(addressRepo);

有人可以帮助模拟未在构造函数级别声明的 @injector 吗?

提前谢谢你。

由于您的依赖项被声明为 属性,您需要通过 属性 setter.

提供存根实现
  1. 使您的 属性 public 可以从外部进行更改。

    export class AddressService {
      @repository(AddressRepository) 
      public addressRepo: AddressRepository;
    
      // ...
    }
    
  2. 在测试中使用常规 属性 setter。

    let addressRepo: StubbedInstanceWithSinonAccessor<AddressRepository>;
    const addressService = new AddressService();
    addressService.addressRepo = addressRepo;