Как смоделировать метод, который возвращает объект ответа с помощью Jest

#javascript #reactjs #jestjs

#javascript #reactjs #jestjs

Вопрос:

У меня есть класс, имеющий реализацию метода, который принимает параметры запроса и возвращает объект ответа. У меня возникла проблема при издевательстве над методом запроса клиента. Может ли кто-нибудь помочь мне в этом. Вот мой класс обслуживания и его тестовый класс.

Service.js

 import Client from '/dist/client';
import urls from './urls';
import { NODE_ENV, API_VERSION } from '../constants';

const versionHeader = 'X-API-VERSION';
class ServiceClass extends Client {
  getFiltersList(params) {
    const config = {
      method: urls.View.getFilters.requestType,
      url: urls.View.getFilters.path(),
      params,
      headers: { [versionHeader]: API_VERSION },
    };

    return this.client.request(config);
  }
}
 

Service.test.js

 import Client from '/dist/client';
import urls from '../services/urls';
import { NODE_ENV, API_VERSION } from '../constants';
import filtersData from '../data/filters-data.json';
const versionHeader = 'X-API-VERSION';
import Service from '../services/Service';

describe('Service Class Test', () => {

  it('Get List Test', () => {

    const params = {
      filters: 'abc,def,ghi',
    };

    let getListSpy;

    const config = {
      method: urls.View.getFilters.requestType,
      url: urls.View.getFilters.path(),
      params,
      headers: { [versionHeader]: API_VERSION },
    };

    getListSpy = jest.spyOn(Service, 'this.client.request(config)');
    getListSpy.mockReturnValue(filtersData);


    expect(getListSpy).toHaveBeenCalledTimes(1);
    expect(getListSpy).toEqual(filtersData);

  });

});
 

Комментарии:

1. вы пробовали mockReturnValue(Promise.resolve(filtersData)) ?

2. Да!! Не повезло. @Nick

Ответ №1:

‘this’ относится к экземпляру класса и может быть закрытым. При этом синтаксис будет

     getListSpy = jest.spyOn(Service.client, 'request');
 

запрос (config) — это вызов функции, а не фактическая функция
, а config — это параметр, передаваемый функции.