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 = '
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非同步
- 如何對非同步呼叫進行單元測試非同步
- 使用jMeter構造大量併發HTTP請求進行微服務效能測試JMeterHTTP微服務
- Wireshark的HTTP請求包和響應包如何對應HTTP
- 使用Angular CLI進行單元測試和E2E測試Angular
- Angular單元測試如何只執行指定的測試用例,提高測試速度Angular
- [譯]對 React 元件進行單元測試React元件
- 如何對Spring MVC中的Controller進行單元測試SpringMVCController
- 使用JUnit進行單元測試
- 如何對第一個Vue.js元件進行單元測試 (上)Vue.js元件
- 如何對第一個Vue.js元件進行單元測試 (下)Vue.js元件
- Jmeter做效能測試——HTTP請求JMeterHTTP
- 使用 http-proxy 對網路請求進行代理HTTP
- 對請求來源進行白名單限制
- 如何執行指定的單元測試
- 使用 $fetch 進行 HTTP 請求HTTP
- 對圖資料庫(Nebula)進行單元測試時的坑資料庫
- 使用Jest進行React單元測試React
- Jest & enzyme 進行react單元測試React
- 使用 Spring 進行單元測試Spring
- 使用 QUnit 進行 JavaScript 單元測試JavaScript
- Android測試Http網路請求。AndroidHTTP
- Postman進行簡單的base64編碼解碼請求測試Postman
- 如果利用 python 對 java 程式碼進行 單元測試?PythonJava
- 用 Mocha 和 Chai 對 JavaScript 程式碼進行單元測試AIJavaScript
- Angular 如何通過 HTTP Interceptor 實現 HTTP 請求的超時監控AngularHTTP
- Angular8單元測試示例指南Angular
- Angular2 http服務AngularHTTP
- Spring Boot單元測試之服務層測試總結Spring Boot
- 如何檢測 Web 服務請求丟失問題Web
- 使用 Spring Boot 進行單元測試Spring Boot
- 利用HSQLDB 進行Hibernate單元測試SQL
- 在C#中進行單元測試C#
- JavaScript 測試教程-part 1:用 Jest 進行單元測試JavaScript
- Android單元測試-對Activity的測試Android
- Android單元測試-對View的測試AndroidView
- angular中的$http服務(service)解析AngularHTTP