mrk*_*nic 6 jasmine angular angular-httpclient
我有一个非常简单的服务电话和茉莉花测试.
服务电话:
myServiceCall(testId: number) : void {
const url = `${this.url}/paramX/${testId}`;
this.http.put(url, {},{headers: this.headers}).subscribe();
}
Run Code Online (Sandbox Code Playgroud)
我的测试方法:
it('should call myServiceCall', inject([MyService], (service: MyService) => {
let testId = undefined;
service.myServiceCall(testId);
let req = httpMock.expectOne(environment.baseUrl + "/paramX/123");
expect(req.request.url).toBe(environment.baseUrl + "/paramX/123");
expect(req.request.body).toEqual({});
req.flush({});
httpMock.verify();
}));
Run Code Online (Sandbox Code Playgroud)
我当然是一个例外,因为我希望url参数为"123"而不是像这个测试用例场景中那样未定义.
错误:预期一个匹配的条件请求"匹配URL: http:// localhost:8080/myservice/paramX/123 ",找不到.
我不明白的是测试框架说的原因
找不到
虽然提出了要求.是否有可能让测试框架告诉我其他实际调用是什么,类似于mockito的验证?
小智 13
我的问题解决了.在我添加到url之后,params(如果你使用params).
let results = { param: 'results', value: '50' };
url = `${api.url}${route.url}?${results.param}=${results.value}`;
HttpTestingController始终只显示没有参数的url,但如果使用expectOne(url)它,则使用带有查询字符串的url:
http://example.com/path/to/page?name=ferret&color=purple
小智 10
您读错了错误,让我为您改错:
错误:预期有一个匹配的请求,但没有找到。
这仅表示您的网址不匹配。
您可以做的是使用以下命令添加URL的控制台日志
console.log(req.request.url);
Run Code Online (Sandbox Code Playgroud)
或者,您可以简单地尝试匹配请求。
其他解决方案:由于您依赖环境变量,因此可以运行此测试:
expect(req.request.url.endsWith("/paramX/123")).toEqual(true);
Run Code Online (Sandbox Code Playgroud)