Я новичок в тестировании Jest и moxios. Просто пытаюсь написать свой первый тест асинхронного действия. Тест умирает с этой ошибкой:
Expected value to equal:
[{"payload": {"checked": true, "followingInfoId": "1"}, "type": "HANDLE_FAVORITE_SUCCESS"}]
Received:
[{"payload": [TypeError: Cannot read property 'getItem' of undefined], "type": "ERROR"}]
Кто-нибудь может сказать мне, где проблема. Я полагаю, что ответ moxios не идет на «тогда»?
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import moxios from 'moxios';
import * as actions from './index';
const middlewares = [thunk];
const mockStore = configureMockStore(middlewares);
const store = mockStore();
describe('followings actions', () => {
beforeEach(() => {
moxios.install();
store.clearActions();
});
afterEach(() => {
moxios.uninstall();
});
it('dispatches the HANDLE_FAVORITE_SUCCESS action', () => {
moxios.wait(() => {
const request = moxios.requests.mostRecent();
request.respondWith({
status: 200,
payload: {
followingInfoId: '1',
checked: true
}
});
});
const expectedActions = [
{
'type': 'HANDLE_FAVORITE_SUCCESS',
payload: {
followingInfoId: '1',
checked: true
}
}
];
return store.dispatch(actions.handleFavorite()).then(() => {
expect(store.getActions()).toEqual(expectedActions);
});
});
});
Вот создатель действия:
export const handleFavorite = data => {
return dispatch => {
return followApi.handleFavorite(data).then(payload => {
dispatch({ type: 'HANDLE_FAVORITE_SUCCESS', payload });
}, err => {
dispatch({ type: 'ERROR', payload: err })
});
}
};
Вот следующийApi.handleFavorite:
handleFavorite: (data) => {
return new Promise ((resolve, reject) => {
httpServise.patch(`${host}:${port}/followings/handle-favorite`, data).then(
res => {
if (res.data.payload) {
resolve(res.data.payload);
} else reject({status: 401});
}, err => reject(err)
);
});
},
И часть http-сервиса при необходимости:
patch: (url, params) => {
return new Promise((resolve, reject) => {
axios(url, {
method: 'PATCH',
headers: getHeaders(),
data: params
}).then(res => {
resolve(res);
}, err => {
reject(err);
});
});
}
handleFavorite
? - person A Jar of Clay   schedule 27.08.2018followApi.handleFavorite
! - person A Jar of Clay   schedule 27.08.2018actions.handleFavorite()
? - person Andrew Carbon   schedule 27.08.2018followApi.handleFavorite
, но трудно сказать где. Возможно, попробуйте записать каждый шаг, который происходит внутри этой функции и подфункций, чтобы увидеть, поможет ли это. - person A Jar of Clay   schedule 27.08.2018mockAxios.patch()
вместоhttpService.patch()
, но что, если я хочу работать с обоими? Первый, когда действие тестируется, а второй, когда есть реальный запрос? Что ты предлагаешь? - person Andrew Carbon   schedule 28.08.2018moxios
, так что вы можете попробовать это, например, сделать что-то вроде того, что я предлагаю в другом ответе здесь: stackoverflow.com/a/51654713/7470360 - person A Jar of Clay   schedule 28.08.2018