首页 > 解决方案 > Angular HttpParams 与字符串 URL

问题描述

我想了解更多关于 HttpParams 的信息。我的 Angular 应用程序中有一个简单的数据服务,它有 2 个功能 - getWithHttpParams、getWithURLParams。

@Injectable({
  providedIn: "root"
})
export class DataService2 {

  constructor(private http: HttpClient) { }

  getWithHttpParams(apiUrl:string, ID: string) {
    const reqParams = new HttpParams().set('ID', ID);
    return this.http.get(Configuration.apiPath + apiUrl, {params: reqParams}).pipe(
      map((res: any) => {
        return res;
      })
    );
  }

  getWithURLParams(apiUrl:string, ID: string) {
    return this.http.get(Configuration.apiPath + apiUrl + "?ID=" + ID).pipe(
      map((res: any) => {
        return res;
      })
    );
  }
}

我正在编写一个单元测试来测试这个服务。

it('should make a GET request with HttpParams', () => {

    service.getWithHttpParams('test', '123').subscribe(data => {
      expect(data).toEqual('test data');
    });

    const req = httpTestingController.expectOne(Configuration.apiPath + 'test?ID=123')
    expect(req.request.method).toEqual('GET');
    expect(req.request.params.get('ID')).toEqual('123');

    req.flush('test data');
});

it('should make a GET request with URL Params', () => {

    service.getWithURLParams('test', '123').subscribe(data => {
      expect(data).toEqual('test data');
    });

    const req = httpTestingController.expectOne(Configuration.apiPath + 'test?ID=123')
    expect(req.request.method).toEqual('GET');
    expect(req.request.params.get('ID')).toEqual('123');

    req.flush('test data');
});

因此,使用 getWithHttpParams 的第一个测试通过但使用 getWithURLParams 的第二个测试失败。这是什么原因?

标签: angularunit-testinghttp

解决方案


推荐阅读