Jest - 测试 httpClient 拒绝承诺
Jest - testing httpClient rejected promise
我有一个 Nest.js 应用程序,我正在尝试测试一个具有简单 httpClient 请求的方法,但我找不到从我的代码中测试 catch 块的方法。
async getUser(): Promise<any> {
try {
return lastValueFrom(
this.httpService.get('https://external.url')
}).pipe(map(response => response.data))
)
} catch (error) {
throw Error(error)
}
}
这是我的承诺得到实现和测试的区块
it('testing success', async () => {
const result: AxiosResponse = {
data: {},
headers: {},
config: {},
status: 200,
statusText: 'OK',
}
jest.spyOn(httpService, 'get').mockImplementationOnce(() => of(result))
const response = mockSuccessRespose
expect(await service.getUser()).toEqual(response)
})
现在我正在尝试使用拒绝条件对其进行测试
it('testing exception', async () => {
jest.spyOn(httpService, 'get').mockReturnValue(throwError(() => Error('error')))
await expect(service.getUser()).rejects.toThrow('error')
})
如果我 运行 最后一个测试通过,但如果我 运行 开玩笑覆盖 'throw Error(error)' 行永远不会被调用。
您不是在等待 try-catch 块中的承诺结果,因此未捕获异常。正确的版本是:
async getUser(): Promise<any> {
try {
return await lastValueFrom(
this.httpService.get('https://external.url').pipe(map(response => response.data))
);
} catch (error) {
throw Error(error)
}
}
我有一个 Nest.js 应用程序,我正在尝试测试一个具有简单 httpClient 请求的方法,但我找不到从我的代码中测试 catch 块的方法。
async getUser(): Promise<any> {
try {
return lastValueFrom(
this.httpService.get('https://external.url')
}).pipe(map(response => response.data))
)
} catch (error) {
throw Error(error)
}
}
这是我的承诺得到实现和测试的区块
it('testing success', async () => {
const result: AxiosResponse = {
data: {},
headers: {},
config: {},
status: 200,
statusText: 'OK',
}
jest.spyOn(httpService, 'get').mockImplementationOnce(() => of(result))
const response = mockSuccessRespose
expect(await service.getUser()).toEqual(response)
})
现在我正在尝试使用拒绝条件对其进行测试
it('testing exception', async () => {
jest.spyOn(httpService, 'get').mockReturnValue(throwError(() => Error('error')))
await expect(service.getUser()).rejects.toThrow('error')
})
如果我 运行 最后一个测试通过,但如果我 运行 开玩笑覆盖 'throw Error(error)' 行永远不会被调用。
您不是在等待 try-catch 块中的承诺结果,因此未捕获异常。正确的版本是:
async getUser(): Promise<any> {
try {
return await lastValueFrom(
this.httpService.get('https://external.url').pipe(map(response => response.data))
);
} catch (error) {
throw Error(error)
}
}