我想测试我的服务(定位服务)。在此位置服务中,我注入了存储库和其他名为 GeoLocationService 的服务,但在尝试模拟此 GeoLocationService 时卡住了。
它给我一个错误
GeolocationService › should be defined
Nest can't resolve dependencies of the GeolocationService (?). Please make sure that the argument HttpService at index [0] is available in the RootTestModule context.
这是提供者的代码
@Injectable()
export class LocationService {
constructor(
@Inject('LOCATION_REPOSITORY')
private locationRepository: Repository<Location>,
private geolocationService: GeolocationService, // this is actually what I ma trying to mock
) {}
async getAllLocations(): Promise<Object> {
return await this.locationRepository.find()
}
....
}
这是测试代码
describe('LocationService', () => {
let service: LocationService;
let repo: Repository<Location>;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [GeolocationModule],
providers: [
LocationService,
{
provide: getRepositoryToken(Location),
useClass: Repository,
},
],
}).compile();
service = module.get<LocationService>(LocationService);
repo = module.get<Repository<Location>>(getRepositoryToken(Location));
});
it('should be defined', () => {
expect(service).toBeDefined();
});
});
答案 0 :(得分:1)
您应该提供 imports: [GeolocationModule]
的模拟,而不是添加 GeolocationService
。这个模拟应该具有与 GeolocationService
相同的方法名称,但它们都可以被存根 (jest.fn()
) 或者它们可以有一些返回值 (jest.fn().mockResolved/ReturnedValue()
)。通常,自定义提供程序(添加到 providers
数组中)如下所示:
{
provide: GeolocationService,
useValue: {
method1: jest.fn(),
method2: jest.fn(),
}
}