Пакет jest-fetch-mock для тестирования не работает. Ошибка json
Очень странно работает пакет jest-fetch-mock для тестирования. В некоторых случаях срабатывает, в некоторых выдает ошибку. Вот например:
Тестируемая функция:
dbUpdateRequest = (props, state) => {
//если значение было изменено
if (props.data.value != state.value) {
fetch(`/api/data/user_settings/${state.id}`, {
method: 'POST',
credentials: 'same-origin',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({param_value: state.value})
})
.then(response => response.json())
.then(response => {
if (!response['Answer']) {
//Если мы здесь, то ошибка данных (формата и пр.)
this.getData();
}
})
.catch(error => {
//Что-то упало
//Обнуляем данные
this.setState({
user_settings: []
});
});
}
};
Тест:
const initialState = {
settings: {
user:{
userId: 1
}
} };
const mockStore = configureStore();
let store, wrapper;
let groups_data = [
{id: 1, group_name: "Сеть"},
{id: 2, group_name: "SXF-карты"}
];
let user_data = { group: "Сеть",
param: "Ip-адрес сервера",
user: "Ivanov",
value: "192.168.70.02"};
const waitUpdateState = () => {
return new Promise((resolve) => {
setTimeout(resolve,0);
})
}
beforeEach(()=> {
fetch.resetMocks()
fetchMock.doMock()
store = mockStore(initialState);
})
test('update данных в базе', async () => {
//Мок для запросов при создании компонента. Работает нормально
fetch.mockResponseOnce(JSON.stringify({settings_group: groups_data,
user_settings: user_data}));
wrapper = shallow(<Settings store = {store}/>);
const instance = wrapper.instance();
const props = {
data: { group: "Сеть",
param: "Ip-адрес сервера",
user: "Ivanov",
value: "192.168.70.02"},
}
let arg = {value:"192.168.70.02", id: 1}
//Мок для запросов функции. Не работает!
fetch.mockResponseOnce(JSON.stringify({Answer: true}));
instance.dbUpdateRequest(props, arg);
await waitUpdateState();
expect(global.fetch.length).toBe(0);
})
Ошибка:
FetchError: invalid json response body at reason: Unexpected end of JSON input
at node_modules/node-fetch/lib/index.js:273:32
И это не первый раз. До этого тоже пыталась его использовать для теста другой функции, результат был с такой же ошибкой, в итоге глобально переопределяла fetch, но теперь все таки нужны возможности этого пакета. В плане формата передаваемых данных - пробовола по-разному писать, даже вставляла то же самое, что и в первом вызове (см комментарии в коде), который вроде работает, но итог - та же ошибка.
Думалось, что в самой функции мб косяк с json (хотя ошибка и в другой функции повторялась), но console.log(state.value) корректно все выводит.
Помогите пожалуйста разобраться.