尝试 HttpClient,它是 Angular 4.3.X 的新功能。它提供了实现 HttpInterceptor 的简单方法。
拦截,
使用具有方法 Intercept 的 HttpInterceptor 接口,您必须在类中重写该方法。
示例代码如下,
import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpResponse, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/Observable/throw';
import 'rxjs/add/operator/catch';
import 'rxjs/add/Observable/of';
import 'rxjs/add/operator/do';
export class YourInterceptor implements HttpInterceptor{
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>{
// Your interceptor code comes here.
// you wish to change the request, change here.
request = request.clone({
setHeaders: {
Authorization: `Bearer ${this.auth.getToken()}`
}
});
return next.handle(request);
}
}
我认为您也在尝试为此编写单元测试,以便这样做
Angular 4 提供了两个很棒的类来使用 HttpTestingController,HttpClientTestingModule。确保在使用之前在 module.ts 文件中提供 HttpClientModule。
import { TestBed, inject, getTestBed } from '@angular/core/testing';
import { HttpClient, HttpClientModule } from '@angular/common/http';
import { HttpTestingController, HttpClientTestingModule } from '@angular/common/http/testing';
import { YourService } from './get-name-service.service';
describe('YourService', () => {
let injector: TestBed;
let httpMock: HttpTestingController;
let yourService: YourService;
beforeEach(() => {
TestBed.configureTestingModule({
imports:[HttpClientTestingModule],
providers: [YourService]
});
injector = getTestBed();
httpMock = injector.get(HttpTestingController);
yourService = TestBed.get(YourService);
});
describe('#getUsers', () => {
it('should return an Observable<User[]>', () => {
const dummyUsers = [
{ login: 'John' },
{ login: 'Doe' }
];
yourService.getNames().subscribe(users => {
console.log('I am here in yourService method');
expect(users.length).toBe(2);
expect(users).toEqual(dummyUsers);
});
const req = httpMock.expectOne('http://localhost:8080/dev/getNames');
expect(req.request.method).toBe("GET");
req.flush(dummyUsers);
});
});
});