Tuz*_*Tuz 4 node.js promise jestjs nestjs
我有一个来自 Nestjs/common 的 httpService
我正在使用如下内容:
const response = await this.httpService.post(`${this.api}/${action}`, data).toPromise();
Run Code Online (Sandbox Code Playgroud)
在我的笑话规范文件(单元测试)中。我想嘲笑这项服务
httpServiceMock = {
post: jest.fn()
};
it('should start', async () => {
const serviceResult = await service.start(data);
});
Run Code Online (Sandbox Code Playgroud)
我遇到了这个错误:
TypeError: this.httpService.post(...).toPromise is not a function
Run Code Online (Sandbox Code Playgroud)
我还尝试添加一个承诺结果,例如:
const promise = Promise.resolve('result');
httpServiceMock.post.mockResolvedValue(promise);
Run Code Online (Sandbox Code Playgroud)
也尝试过:
it('should start', async () => {
const mockObservable = Promise.resolve({
toPromise: () => {
console.log('toPromise called');
}
})
httpServiceMock.post.mockImplementation(() => mockObservable);
const serviceResult = await service.start();
});
Run Code Online (Sandbox Code Playgroud)
我的问题是如何模拟承诺并返回响应或异常
返回值httpService.post需要返回一个Observable<AxiosResponse<T>>,其中包含一个属性toPromise,它是一个函数。你的模拟返回一个已解决的承诺,而它需要返回一个假的 Observable。
Observable 是立即返回的,因此post实现可以只返回一个原始值,但toPromise需要返回一个 Promise。
返回正确形状的对象以消除此错误:
const mockObservable = {
toPromise: () => Promise.resolve('result')
}
httpServiceMock.post.mockImplementation(() => mockObservable);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5401 次 |
| 最近记录: |