在Angular 2中测试http请求URL的正确方法

时间:2016-02-08 23:24:30

标签: jasmine angular angular2-services

使用Angular 2我已经设置了一些服务,每个方法都返回一个不同的http请求,如下所示:

public create(user:User): Observable<any> {
  return this.http.post(this._apiUrls.create,
    JSON.stringify(user), {
      headers: this.apiConfig.getApiHeaders()
    });
}

我想测试一下这个方法。我正在测试请求网址,标头和用户。我有点卡在url部分,我可以测试实际的url但我无法弄清楚如何测试它是否是GET,POST等...在Angular 1中我们使用了expectGET或expectPOST之类的东西。这就是我到目前为止的方式:

beforeEachProviders(() => [
  MockBackend,
  BaseRequestOptions,
  provide(Http, {
    useFactory: (backend, defaultOptions) => new Http(backend, defaultOptions),
    deps: [MockBackend, BaseRequestOptions]
  }),
  ApiConfig,
  Authentication
]);

it('Should make a request to login a new user', inject([Authentication, MockBackend], (service, mockBackend) => {
  let connection;
  connection = mockBackend.connections.subscribe(c => connection = c);
  service.create(setUser()).subscribe((res) => {
    expect(connection.request.url).toBe(service.apiConfig.getApiRoot()+'api/identities/login');
    expect(connection.request._body).toEqual(JSON.stringify(setUser()));
  });
  connection.mockRespond(200);
}));

知道如何获得请求的类型吗?或者我只是做错了?

2 个答案:

答案 0 :(得分:1)

目前(beta.3)没有简单的方法来测试它(如AngularJS 1.x中的expectGET),但是你走在正确的轨道上。

你可以这样做:

service.create(setUser()).subscribe((res) => {
  expect(res.request.method).toBe(RequestMethod.Post);
});

前段时间我打开了一个问题,要求有一个更好的API进行测试,你可以follow it on Github

答案 1 :(得分:-1)

您可以使用http.get对象调用http.post,而不是调用http.requestRequest。类API为here。第一个成员是RequestMethod枚举类型的值,因此您应该能够在Jasmine中测试它。

相关问题