0

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 部分に少し行き詰まっています。実際の 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);
}));

リクエストのタイプを取得する方法はありますか? それとも、私はそれを間違っていますか?

4

2 に答える 2

1

現在 (beta.3) これをテストする簡単な方法 ( expectGETAngularJS 1.x のように) はありませんが、正しい方向に進んでいます。

できるよ:

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

私は少し前にイシューを開いて、テスト用のより優れた API を用意しました。Github でフォローできます

于 2016-02-09T08:14:28.520 に答える
-1

http.getまたはを呼び出す代わりに、オブジェクトを使用してhttp.post呼び出すことができます。クラス API はこちらです。最初のメンバーはRequestMethod列挙型の値であるため、Jasmine でテストできるはずです。http.requestRequest

于 2016-02-09T03:09:17.613 に答える