我有一个来自nestjs / common的httpService
我正在使用如下所示:
const response = await this.httpService.post(`${this.api}/${action}`, data).toPromise();
并在我的jest spec文件中(单元测试)。我正在尝试嘲笑这项服务
httpServiceMock = {
post: jest.fn()
};
it('should start', async () => {
const serviceResult = await service.start(data);
});
我有这个错误:
TypeError: this.httpService.post(...).toPromise is not a function
我还试图添加一个承诺结果,例如:
const promise = Promise.resolve('result');
httpServiceMock.post.mockResolvedValue(promise);
也尝试过:
it('should start', async () => {
const mockObservable = Promise.resolve({
toPromise: () => {
console.log('toPromise called');
}
})
httpServiceMock.post.mockImplementation(() => mockObservable);
const serviceResult = await service.start();
});
我的问题是我该如何嘲笑承诺并返回响应或异常
返回值httpService.post需要返回,Observable<AxiosResponse<T>>
其中包含属性toPromise,该属性是一个函数。您的模拟返回一个已解决的承诺,而它需要返回一个假的Observable。
Observable立即返回,因此post
实现可以只返回原始值,但是toPromise
需要返回承诺。
返回正确的形状对象以摆脱此错误:
const mockObservable = {
toPromise: () => Promise.resolve('result')
}
httpServiceMock.post.mockImplementation(() => mockObservable);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句