Angular如何對包含了HTTP請求的服務類進行單元測試
本文使用到的所有程式碼在Github這個資料夾下面: https:// github.com/wangzixi-dia blo/angular-sandbox/blob/master/src/app/ngrxdemo/service/unittest-study
服務類實現:
import { Injectable } from '@angular/core';
import { HttpClient, HttpRequest } from '@angular/common/http';
@Injectable()
export class DataService {
url = 'https://jsonplaceholder.typicode.com/users';
constructor(private http: HttpClient) {}
getData() {
const req = new HttpRequest('GET', this.url, {
reportProgress: true
});
return this.http.request(req);
}
}
首先,從@angular/common/http裡倒入HttpClientTestingModule,注入到TestBed的TestingModule中去。
將HttpTestingController注入單元測試程式碼裡,用變數httpMock表示:
粉紅色小括號包含起的這段程式碼內,呼叫了dataService的getData方法。
HttpTestingController.expectOne:
期望一個基於傳入引數url的HTTP請求已經被髮起,並且返回其mock.
我們可以基於mockReq進行各種斷言處理。
expect(mockReq.cancelled).toBeFalsy();
確認該請求沒有被cancel
expect(mockReq.request.responseType).toEqual('json');
確保響應型別是JSON
mockReq.flush(mockUsers)
使用flush傳入的引數作為HTTP請求的返回引數:
flush執行完之後,才會觸發getData返回的Observable的subscribe回撥函式。
執行時時序:
(1) 先執行service.getData
真的呼叫到service的getData程式碼裡了:
此時event.type = 0:
(2) 拿到HTTP請求的mock物件:
準備flush:
一旦flush之後,直接getData返回的Observable的subscribe回撥函式會被觸發,event.body就為flush傳入的mockUsers.
更多Jerry的原創文章,盡在:"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2747835/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Go 單元測試之HTTP請求與API測試GoHTTPAPI
- 使用FakeAsync對Angular非同步程式碼進行單元測試Angular非同步
- Wireshark的HTTP請求包和響應包如何對應HTTP
- 如何對Spring MVC中的Controller進行單元測試SpringMVCController
- 使用jMeter構造大量併發HTTP請求進行微服務效能測試JMeterHTTP微服務
- 使用Angular CLI進行單元測試和E2E測試Angular
- Angular單元測試如何只執行指定的測試用例,提高測試速度Angular
- [譯]對 React 元件進行單元測試React元件
- 如何使用MOQ進行單元測試
- 單元/整合測試服務
- 使用 $fetch 進行 HTTP 請求HTTP
- 使用 http-proxy 對網路請求進行代理HTTP
- 對請求來源進行白名單限制
- 如何對第一個Vue.js元件進行單元測試 (上)Vue.js元件
- 如何對第一個Vue.js元件進行單元測試 (下)Vue.js元件
- Angular 如何通過 HTTP Interceptor 實現 HTTP 請求的超時監控AngularHTTP
- 使用JUnit進行單元測試
- 使用jest進行單元測試
- 如果利用 python 對 java 程式碼進行 單元測試?PythonJava
- 對圖資料庫(Nebula)進行單元測試時的坑資料庫
- 如何執行指定的單元測試
- Netty整合SpringMVC,實現高效的HTTP服務請求NettySpringMVCHTTP
- Jest & enzyme 進行react單元測試React
- 使用Jest進行React單元測試React
- 使用 Spring Boot 進行單元測試Spring Boot
- Angular2 http服務AngularHTTP
- 如何使用jMeter對某個OData服務進行高併發效能測試JMeter
- Angular8單元測試示例指南Angular
- 如何針對服務是否有重新連線資料庫的能力進行測試資料庫
- 如何檢測 Web 服務請求丟失問題Web
- Spring Boot單元測試之服務層測試總結Spring Boot
- Python中的單元測試框架:使用unittest進行有效測試Python框架
- Jmeter 對 Java 請求的測試實施JMeterJava
- 在C#中進行單元測試C#
- 前端傳送的請求,是如何請求到後端服務的?前端後端
- JavaScript 測試教程-part 1:用 Jest 進行單元測試JavaScript
- 合併HTTP請求vs並行HTTP請求,到底誰更快?HTTP並行
- 合併HTTP請求 vs 並行HTTP請求,到底誰更快?HTTP並行