我正在尝试对我的有角度的项目进行单元测试,但我遇到一个问题,我不知道如何测试补丁请求,不知道该怎么做?
提前谢谢!
这是我在profile.service.ts中的补丁请求
patch(userModel: Owner): Observable<Response> {
return this.http.patch(ApiUrls.profile, userModel).pipe(
tap((data: any) => {
this.sessionService.user = data;
this.profile$.next(data);
}));
}
和所有者模型
export class Owner {
id: number;
username: string;
email: string;
first_name: string;
last_name: string;
avatar: string;
location: string;
color_scheme: string;
language: string;
}
答案 0 :(得分:1)
从Angular Docs那里可以很好地了解有关测试http调用的信息:https://angular.io/guide/http#testing-http-requests
基本上,它包括三个步骤。首先,您需要在 let quotesArray = [{
author: "Author1",
quotes: ["a", "b", "c", "d", "e"]
},
{
author: "Author2",
quotes: ["f", "g", "h"]
},
{
author: "Author3",
quotes: ["i", "j"]
},
{
author: "Author4",
quotes: ["k", "l", "m", "n"]
}];
function randomElementFromArray(inputArray){
return inputArray[Math.floor(Math.random()*inputArray.length)];
}
var selectedItem = randomElementFromArray(quotesArray);
author.innerHTML = selectedItem.author;
var selectedQuotesArray = selectedItem.quotes;
quote.innerHTML = randomElementFromArray(selectedQuotesArray);
中导入HttpTestingController
,并从注射器中提取TestBed
(用于发出请求)和HttpClient
(用于验证和处理请求)。>
接下来,您需要在测试中调用创建httpCall的方法
HttpTestingController
在同一测试中,比起yourServiceInstance.patch(testData)
.subscribe(response =>
// here you can assert response
expect(response).toEqual(expectedResponse);
);
的句柄,并断言刚刚建立的请求已执行,我们还将为该请求获取处理程序
HttpTestingController
使用此const requestHandler = httpTestingController.expectOne(ApiUrls.profile);
,您可以断言一些其他事情,例如您的方法为PATCH
requestHandler
最后,您必须在expect(requestHandler.request.method).toEqual('PATCH');
中刷新请求,因此将使用requestHandler
在上面设置的订阅中声明,我们在expectedResponse
上调用verify()
以确保没有同时发生了意外的请求。
HttpTestingController