1

我正在使用 loopback-4,寻找帮助来模拟在类级别声明的@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 吗?

先感谢您。

4

1 回答 1

0

由于您的依赖项被声明为属性,因此您需要通过属性设置器提供存根实现。

  1. 使您的财产public可以从外部进行更改。

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

    let addressRepo: StubbedInstanceWithSinonAccessor<AddressRepository>;
    const addressService = new AddressService();
    addressService.addressRepo = addressRepo;
    
于 2019-10-04T15:22:31.770 回答