在 Angular 2 中测试 http 请求 URL 的正确方法
Correct way to test http request URL's in Angular 2
使用 Angular 2 我设置了一些服务,每个方法都在 returns 不同的 http 请求中,像这样:
public create(user:User): Observable<any> {
return this.http.post(this._apiUrls.create,
JSON.stringify(user), {
headers: this.apiConfig.getApiHeaders()
});
}
我想测试这个方法。我正在测试请求 url、headers 和用户。我有点卡在 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);
}));
知道如何获取请求的类型吗?还是我只是做错了?
您可以使用 Request
对象调用 http.request
,而不是调用 http.get
或 http.post
。 class API 是 here. The first member is a value of the RequestMethod 枚举类型,因此您应该能够在 Jasmine 中测试它。
目前 (beta.3) 没有简单的方法来测试它(比如 AngularJS 1.x 中的 expectGET
),但你走在正确的轨道上。
你可以这样做:
service.create(setUser()).subscribe((res) => {
expect(res.request.method).toBe(RequestMethod.Post);
});
前段时间我开了个issue想要更好的API来测试,你可以follow it on Github
使用 Angular 2 我设置了一些服务,每个方法都在 returns 不同的 http 请求中,像这样:
public create(user:User): Observable<any> {
return this.http.post(this._apiUrls.create,
JSON.stringify(user), {
headers: this.apiConfig.getApiHeaders()
});
}
我想测试这个方法。我正在测试请求 url、headers 和用户。我有点卡在 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);
}));
知道如何获取请求的类型吗?还是我只是做错了?
您可以使用 Request
对象调用 http.request
,而不是调用 http.get
或 http.post
。 class API 是 here. The first member is a value of the RequestMethod 枚举类型,因此您应该能够在 Jasmine 中测试它。
目前 (beta.3) 没有简单的方法来测试它(比如 AngularJS 1.x 中的 expectGET
),但你走在正确的轨道上。
你可以这样做:
service.create(setUser()).subscribe((res) => {
expect(res.request.method).toBe(RequestMethod.Post);
});
前段时间我开了个issue想要更好的API来测试,你可以follow it on Github