Angular 带参数的角度http服务调用单元测试
我正在尝试测试此服务呼叫 我收到以下错误:错误:需要一个匹配条件“匹配URL:/api/publicdata/countries[object]”的请求,但未找到任何请求。Angular 带参数的角度http服务调用单元测试,angular,unit-testing,jasmine,karma-runner,Angular,Unit Testing,Jasmine,Karma Runner,我正在尝试测试此服务呼叫 我收到以下错误:错误:需要一个匹配条件“匹配URL:/api/publicdata/countries[object]”的请求,但未找到任何请求。 问题是我们正在将参数传递到调用中,我不知道如何添加它们。请您提供帮助。可能您正在等待http调用发出后,请尝试下面的测试用例 it('should return all countries', () => { const url = ({ const: environment.url + 'count
问题是我们正在将参数传递到调用中,我不知道如何添加它们。请您提供帮助。可能您正在等待http调用发出后,请尝试下面的测试用例
it('should return all countries', () => {
const url = ({ const: environment.url + 'countries', params: {'pagesize': '300'}});
let countriesRequest: TestRequest = httpTestingController.expectOne(url.const + url.params);
countriesService.getCountries().subscribe((data: Country[]) => {
expect(data).toBe(countries);
});
expect(countriesRequest.request.method).toEqual('GET');
countriesRequest.flush(countries);
})});
不确定OP是否修复了它
expectOne(url.const + url.params) // Wrong
expectOne(url.const + '?param1=value') // should be that
可能是我迟到了,但下面的解决方案对你们有用
HttpParams
对象并append()
在其中创建所有查询参数HttpRequest
对象并为其提供适当的值httpTestingController.expectOne()
,如下所示urlWithParams
来比较URL,因为它减少了检查每个URL的代码
参数对象这可能是一个输入错误,但服务方法是get(),但您在测试中并没有实际调用该特定方法,而是调用getCountries()。同样,您不能将对象插入到这样的字符串中。使用模板字符串或字符串连接来提取所需的特定属性<代码>+'?pagesize'+参数pagesize或类似文件。将其与正在运行的应用程序将url转换为的内容进行匹配。这是一个输入错误,感谢您,尽管使用带有GET参数的
expectOne
是一件痛苦的事情。我发现使用expectOne
()的matchFn
重载更容易。它接收到HttpRequest
对象,因此您可以轻松地比较基本url和参数值示例please,我看不到matchFn函数,只是Match仍然存在相同的错误。这与向服务调用中添加参数有关。我删除了参数,它可以正常工作,但由于我们的后端可以通过向调用中添加参数来进行各种过滤,我需要确保调用与预期的一样,因为您可能可以删除参数,因为您只希望http调用。您还应该模拟http调用。同时添加以下语句countriesRequest.result([国家/地区数组]
it('should return all countries', () => {
const url = ({ const: environment.url + 'countries', params: {'pagesize': '300'}});
let countriesRequest: TestRequest = httpTestingController.expectOne(url.const + url.params);
countriesService.getCountries().subscribe((data: Country[]) => {
expect(data).toBe(countries);
});
expect(countriesRequest.request.method).toEqual('GET');
countriesRequest.flush(countries);
})});
expectOne(url.const + url.params) // Wrong
expectOne(url.const + '?param1=value') // should be that
it('should return all countries', fakeAsync(() => {
countriesService.getCountries().subscribe((data: Country[]) => {
expect(data).toBe(countries);
});
// you can create multiple parameters by appending on same object
let parameters = new HttpParams().append('pagesize', '30');
// environment is your base url
const httpReq = new HttpRequest('GET',environment.url, {params:parameters});
let countriesRequest = httpTestingController.expectOne((req:HttpRequest)=>
req.method === httpReq.method && req.urlWithParams === httpReq.urlWithParams
);
countriesRequest.flush(countries);
httpTestingController.verify();
});