如何测试补丁请求?

时间:2018-07-21 10:19:20

标签: angular unit-testing

我正在尝试对我的有角度的项目进行单元测试,但我遇到一个问题,我不知道如何测试补丁请求,不知道该怎么做?

提前谢谢!

这是我在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;
}

1 个答案:

答案 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