失败:预期找到一个条件 "Match URL method: GET" 的匹配请求 none
Failed: Expected one matching request for criteria "Match URL method: GET" found none
您好,我正在尝试在我的 jasmine 单元测试中对 API 进行模拟 GET 调用,它返回给我 url 未找到错误。
我在 service.spec 文件中这样做了:
it('GET call for store details API', waitForAsync(inject([HttpTestingController, AuthService],
(httpClient: HttpTestingController, authService: AuthService) => {
var obj = {
"IsSuccess": true,
"Result": [
{
"Details": "Test"
}
]
}
authService.getStoreDetails()
.subscribe((get: any) => {
expect(get).toBe(obj);
});
const successRequest = httpTestingController.expectOne(environment.baseUrl1 + '/api/details/10/0');
expect(successRequest.request.method).toEqual('GET');
successRequest.flush(obj);
httpTestingController.verify();
})));
当我在没有多个端点 ex; api/user
的其他 GET 调用中做同样的事情时,测试工作正常。这个以及使用某些参数的 GET 的解决方案是什么?
编辑:-
添加service.ts
createId() {
const ids = localStorage.getItem('ids');
return ids
}
// GET API for Store Details
getStoreDetails(): Observable<any> {
let headers = this.createAuthrorizationHeader();
let idd = this.createId();
var id = Number(JSON.parse(idd!));
return this.http
.get(`${environment.baseUrl1}/api/details/${id}/0`, { headers:
headers })
.pipe(tap(res => {
console.log(res);
retry(2),
catchError(this.handleError)
})
)
}
也许您的 URL 对 expectOne
是错误的,或者它可能不是 GET
请求。
要调试,试试这个:
it('GET call for store details API', waitForAsync(inject([HttpTestingController, AuthService],
(httpClient: HttpTestingController, authService: AuthService) => {
var obj = {
"IsSuccess": true,
"Result": [
{
"Details": "Test"
}
]
}
// Edit - add this line
localStorage.setItem('ids', '10')
authService.getStoreDetails()
.subscribe((get: any) => {
// expect(get).toBe(obj);
expect(1).toBe(1);
});
// const successRequest = httpTestingController.expectOne(environment.baseUrl1 + '/api/details/10/0');
// expect(successRequest.request.method).toEqual('GET');
// successRequest.flush(obj);
// log out the URL you expect
console.log('url: ', environment.baseUrl1 + '/api/details/10/0');
httpTestingController.verify();
})));
afterEach(() => {
// clear local storage so it does not leak for other tests
localStorage.clear();
});
httpTestingController.verify()
应该检测是否有任何正在进行的 HTTP 调用尚未处理(未刷新)。
如果有,它会告诉你 URL 没有被刷新,你应该使用这个 URL 作为 expectOne
。
如果没有,则问题更大,authService.getStoreDetails()
没有进行 API 调用。
这应该可以帮助您进行调试。
编辑:我看到了问题,很可能 ids
在 localStorage 中未定义,您必须设置此项。
您好,我正在尝试在我的 jasmine 单元测试中对 API 进行模拟 GET 调用,它返回给我 url 未找到错误。
我在 service.spec 文件中这样做了:
it('GET call for store details API', waitForAsync(inject([HttpTestingController, AuthService],
(httpClient: HttpTestingController, authService: AuthService) => {
var obj = {
"IsSuccess": true,
"Result": [
{
"Details": "Test"
}
]
}
authService.getStoreDetails()
.subscribe((get: any) => {
expect(get).toBe(obj);
});
const successRequest = httpTestingController.expectOne(environment.baseUrl1 + '/api/details/10/0');
expect(successRequest.request.method).toEqual('GET');
successRequest.flush(obj);
httpTestingController.verify();
})));
当我在没有多个端点 ex; api/user
的其他 GET 调用中做同样的事情时,测试工作正常。这个以及使用某些参数的 GET 的解决方案是什么?
编辑:-
添加service.ts
createId() {
const ids = localStorage.getItem('ids');
return ids
}
// GET API for Store Details
getStoreDetails(): Observable<any> {
let headers = this.createAuthrorizationHeader();
let idd = this.createId();
var id = Number(JSON.parse(idd!));
return this.http
.get(`${environment.baseUrl1}/api/details/${id}/0`, { headers:
headers })
.pipe(tap(res => {
console.log(res);
retry(2),
catchError(this.handleError)
})
)
}
也许您的 URL 对 expectOne
是错误的,或者它可能不是 GET
请求。
要调试,试试这个:
it('GET call for store details API', waitForAsync(inject([HttpTestingController, AuthService],
(httpClient: HttpTestingController, authService: AuthService) => {
var obj = {
"IsSuccess": true,
"Result": [
{
"Details": "Test"
}
]
}
// Edit - add this line
localStorage.setItem('ids', '10')
authService.getStoreDetails()
.subscribe((get: any) => {
// expect(get).toBe(obj);
expect(1).toBe(1);
});
// const successRequest = httpTestingController.expectOne(environment.baseUrl1 + '/api/details/10/0');
// expect(successRequest.request.method).toEqual('GET');
// successRequest.flush(obj);
// log out the URL you expect
console.log('url: ', environment.baseUrl1 + '/api/details/10/0');
httpTestingController.verify();
})));
afterEach(() => {
// clear local storage so it does not leak for other tests
localStorage.clear();
});
httpTestingController.verify()
应该检测是否有任何正在进行的 HTTP 调用尚未处理(未刷新)。
如果有,它会告诉你 URL 没有被刷新,你应该使用这个 URL 作为 expectOne
。
如果没有,则问题更大,authService.getStoreDetails()
没有进行 API 调用。
这应该可以帮助您进行调试。
编辑:我看到了问题,很可能 ids
在 localStorage 中未定义,您必须设置此项。