我是新手 我有一个使用某些参数调用HTTP发布请求的服务。 现在,我要按角度测试该服务功能。
我的服务部分是
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class GetProviderService{
providersData: any;
constructor(private http: HttpClient) {
}
getProviders(param: any): any{
var json = JSON.stringify(param);
const myHeader = new HttpHeaders().set('content-type','application/json');
this.http.post<any>(url, json, {headers: myHeader}).subsribe(data=> {
this.providerData = data;
return this.providerData;
}),
(erorr) => {
window.alert("error");
return null;
}
}
现在我想用错误订阅和错误覆盖getProviders函数。 我该怎么办?
谢谢。
答案 0 :(得分:1)
假设您从某处获取url(例如getProviders(param: any, url: string)
是测试套件的示例:
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { GetProviderService } from './get-provider.service';
describe('GetProviderService', () => {
let service: GetProviderService;
let httpMock: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule
]
});
service = TestBed.inject(GetProviderService);
httpMock = TestBed.inject(HttpTestingController);
});
fit('should log success on success', () => {
const mockUrl = 'http://mockurl.com/test';
const mockResponse = {hello: 'test'}
service.getProviders({}, mockUrl);
httpMock.expectOne(mockUrl).flush(mockResponse);
// your expects here
});
fit('should log error on error', () => {
const mockUrl = 'http://mockurl.com/test';
const mockErrorMsg = 'My mock error message'
const mockError = new ErrorEvent('Network error', {
message: mockErrorMsg,
});
service.getProviders({}, mockUrl);
httpMock.expectOne(mockUrl).error(mockError);
// your expects here
});
});
这是相关的角度文档: https://angular.io/guide/http#testing-http-requests
这是http指南的一部分,而不是测试指南,这可能就是您找不到它的原因。