mock a toPromise function in jest - got .toPromise is not a function

Tuz

I have an httpService from nestjs/common

and I am using like the following:

const response = await this.httpService.post(`${this.api}/${action}`, data).toPromise();

and in my jest spec file ( unit testing) . i am trying to mock this service

   httpServiceMock = {
      post: jest.fn()
    };

it('should start', async () => {

    const serviceResult = await service.start(data);

});

and I have got this error :

TypeError: this.httpService.post(...).toPromise is not a function

I am also trying to add a promise result like :

 const promise = Promise.resolve('result');
 httpServiceMock.post.mockResolvedValue(promise);

tried also :

it('should start', async () => {

    const mockObservable = Promise.resolve({
        toPromise: () => {
          console.log('toPromise called');
        }
      })

    httpServiceMock.post.mockImplementation(() => mockObservable);

    const serviceResult = await service.start();

});

My question is how can I mock the promise and return a response or exception

A Jar of Clay

The return value httpService.post needs to return an Observable<AxiosResponse<T>> which includes a property toPromise, which is a function. Your mock returns a resolved promise, whereas it needs to return a fake Observable.

The Observable is returned immediately, so the post implementation can just return a raw value, but the toPromise needs to return a promise.

Return the correct shaped object to get rid of this error:

const mockObservable = {
  toPromise: () => Promise.resolve('result')
}
httpServiceMock.post.mockImplementation(() => mockObservable);

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related