【发布时间】:2019-12-01 08:13:27
【问题描述】:
我想为服务编写单元测试。第一次测试失败, 出现此错误:
NullInjectorError: StaticInjectorError(DynamicTestModule)[HttpClient]:
StaticInjectorError(Platform: core)[HttpClient]:
NullInjectorError: 没有 HttpClient 的提供者!
我不明白这一点,因为在被测试的服务中我没有在哪里使用HttpClient。
规格文件:
export class MockApiService {
private apiUrl = 'apiUrl';
get(endPoint: string) {
return new Observable<{data: 'data'}>();
}
post(endPoint: string, data: any) {
return new Observable<{data: 'data'}>();
}
patch(endPoint: string, data: any) {
return new Observable<{data: 'data'}>();
}
getApiUrl() {
return this.apiUrl;
}
}
describe('TimeSlotService', () => {
beforeEach(() => TestBed.configureTestingModule({
providers: [
TimeSlotService,
{ provide: ApiService, useValue: MockApiService }
]
}));
it('should be created', () => {
const service: TimeSlotService = TestBed.get(TimeSlotService);
expect(service).toBeTruthy();
});
});
时隙服务文件:
@Injectable({
providedIn: 'root'
})
export class TimeSlotService {
constructor(private api: ApiService) { }
static toPeriods(timeSlots: TimeSlot[]): string[] {
const periods: string[] = [];
for (const timeSlot of timeSlots) {
periods.push(timeSlot.start + ' - ' + timeSlot.end);
}
return periods;
}
getTimeSlots() {
return this.api.get('timeSlots')
.pipe(map(ApiService.extractData));
}
}
我在这里错过了什么?
【问题讨论】:
-
不太确定错误,但您肯定还需要将您尝试测试的服务添加到您的 TestBed 提供商列表中。
-
@Erbsenkoenig 我实际上也尝试过,但它给出了同样的错误。但我会更改它,因为如果此错误消失,它仍然无法工作
-
@Erbsenkoenig 我很愚蠢,但你的建议确实解决了它......我之前在组件单元测试中尝试过你的建议,但在那里失败了,因此我很困惑。
-
请不要问任何问题,一旦可行,请将问题更改为新问题。请打开一个新问题,否则我们给出的答案对阅读您的问题的任何人都没有任何意义。
-
@Erbsenkoenig 明白了,我会改回来
标签: angular unit-testing