#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 — это параметр, передаваемый функции.