如何对 Angular HttpClient 204 响应进行单元测试?
How do I unit test an Angular HttpClient 204 response?
我们的 REST 服务 returns 204 用于无数据场景。但是我不知道如何测试这种情况。
it('can handle no data', (done) => {
const testData = service.getDummyData();
service.dataChanged$.subscribe(
(data: Data[]) => {
expect(data).toBeUndefined();
done();
}
);
service.getData();
const request: TestRequest = backend.expectOne(MyService.URL);
request.flush(undefined, { status: 204, statusText: 'No Data' });
});
我试过通过:
- 未定义和错误
Error: Automatic conversion to JSON is not supported for response type.
- 无
- 响应数据是字符串"null"
那么,我应该将什么传递给刷新函数以发送空响应?我测试服务中的响应(简体):
this.http.get<Data[]>(MyService.URL)
.first().subscribe(
(data: Data[]) => {
if (data) {
this.dataChanged$.next(data);
} else {
Logger.error(MyService.name, 'getData', 'No data.');
this.dataChanged$.next(undefined);
}
},
(error: Error) => {
Logger.error(MyService.name, 'getData', error.message);
this.dataChanged$.next(undefined);
}
);
所以,简单的答案是,将 '' 传递给 flush():
request.flush('', { status: 204, statusText: 'No Data' });
我们的 REST 服务 returns 204 用于无数据场景。但是我不知道如何测试这种情况。
it('can handle no data', (done) => {
const testData = service.getDummyData();
service.dataChanged$.subscribe(
(data: Data[]) => {
expect(data).toBeUndefined();
done();
}
);
service.getData();
const request: TestRequest = backend.expectOne(MyService.URL);
request.flush(undefined, { status: 204, statusText: 'No Data' });
});
我试过通过:
- 未定义和错误
Error: Automatic conversion to JSON is not supported for response type.
- 无
- 响应数据是字符串"null"
那么,我应该将什么传递给刷新函数以发送空响应?我测试服务中的响应(简体):
this.http.get<Data[]>(MyService.URL)
.first().subscribe(
(data: Data[]) => {
if (data) {
this.dataChanged$.next(data);
} else {
Logger.error(MyService.name, 'getData', 'No data.');
this.dataChanged$.next(undefined);
}
},
(error: Error) => {
Logger.error(MyService.name, 'getData', error.message);
this.dataChanged$.next(undefined);
}
);
所以,简单的答案是,将 '' 传递给 flush():
request.flush('', { status: 204, statusText: 'No Data' });