Вы издеваетесь над запросом ios через mox ios, но кажется, что вы не возвращаете данные в ожидаемом формате.
В вашем создателе действий вы читаете данные ответа как:
const topStreams = response.data.data;
const users = userResponse.data.data;
Но вы высмеиваете ответ так, что он возвращает:
const responsePayload = [{ id: 1 }, { id: 2 }, { id: 3 }];
Вместо этого, похоже, вы должны возвращать:
const responsePayload = { data: [{ id: 1 }, { id: 2 }, { id: 3 }] };
Помимо ложный ответ, ваш код представляет некоторые дополнительные проблемы. Во-первых, как вы сами заметили, вы только издеваетесь над первым запросом. Вы должны посмеяться над вторым запросом, а также вернуть нужные данные. Во-вторых, в вашем утверждении вы ожидаете, что действия будут созданы в:
const expectedActions = [
fetchTopStreamsStart(),
fetchTopStreamsSuccess(responsePayload)
];
Это не будет правдой, поскольку вы обрабатываете responsePayload
в создателе действия, так что полезная нагрузка, с которой вы Вызов fetchTopStreamsSuccess
в действии создателя будет отличаться от responsePayload
.
С учетом всего этого ваш тестовый код может выглядеть следующим образом:
it('creates both fetchTopStreamsStart and fetchTopStreamsSuccess when api call succeeds', () => {
const streamsResponse = [
{ user_id: 1, thumbnail_url: 'thumbnail-1-{width}x{height}' },
{ user_id: 2, thumbnail_url: 'thumbnail-2-{width}x{height}' },
{ user_id: 3, thumbnail_url: 'thumbnail-3-{width}x{height}' }
];
const usersResponse = [
{ id: 1, profile_image_url: 'image-1' },
{ id: 2, profile_image_url: 'image-2' },
{ id: 3, profile_image_url: 'image-3' }
];
const store = mockStore();
// Mock the first request by URL.
moxios.stubRequest('https://api.twitch.tv/helix/streams?first=5', {
status: 200,
response: { data: streamsResponse }
});
// Mock the second request.
moxios.stubRequest('https://api.twitch.tv/helix/users?id=1&id=2&id=3', {
status: 200,
response: { data: usersResponse }
});
return store.dispatch(fetchTopStreamsStartAsync()).then(() => {
expect(store.getActions()).toEqual([
fetchTopStreamsStart(),
{
"type": "TOP_STREAMS_SUCCESS",
"payload": [
{ "avatar": "image-1", "thumbnail": "thumbnail-1-1280x720", "user_id": 1 },
{ "avatar": "image-2", "thumbnail": "thumbnail-2-1280x720", "user_id": 2 },
{ "avatar": "image-3", "thumbnail": "thumbnail-3-1280x720", "user_id": 3 },
]
}
]);
});
});
Обратите внимание, что я сделал до структуры действия fetchTopStreamsSuccess
иметь атрибут type
, равный TOP_STREAMS_SUCCESS
, и атрибут payload
с данными completeStreams
. Вам, вероятно, придется приспособить это к реальной структуре действия fetchTopStreamsSuccess
, которое вы создаете, чтобы пройти тест.