Я пытался проверить одну из моих функций, которая имеет диспетчерские вызовы для моего приложения в redux. Тест использует мокко, phantomjs. Я использую nock для создания http-звонков.Невозможно протестировать асинхронные действия в Redux
Мой тест:
import React from 'react/addons';
import thunk from 'redux-thunk'
import nock from 'nock'
import expect from 'expect'
import configureMockStore from 'redux-mock-store'
import {RECEIVE_DATA1,RECEIVE_DATA2,RECEIVE_DATA3,fetchAllData} from '../../src/actions/allActions'
const middlewares = [ thunk ];
const mockStore = configureMockStore(middlewares);
describe('async actions',() => {
afterEach(() => {
nock.cleanAll()
})
it('creates fetchAllDataAction call', (done) => {
const requesting = false;
nock('http://localhost:7788/')
.get('/data/Data1')
.reply(200,{ objects: { name: 'Test1'} })
.get('/Data2')
.reply(200,{ objects: { name: 'Test2'} })
.get('/Data3')
.reply(200,{ objects: { name: 'Test3'} });
const expectedActions = [
{ type: RECEIVE_DATA1 , objects: { name: 'Test1'}},
{ type: RECEIVE_DATA2 , objects: { name: 'Test2'}},
{ type: RECEIVE_DATA3 , objects: { name: 'Test3'} },
{ type: REQUEST_DATA3 , requesting},
]
const store_mock = mockStore({},expectedActions,done)
return store_mock.dispatch(fetchAllData())
.then(() => {
const actions = store.getActions()
expect(actions).toEqual(expectedActions)
done()
})
})
})
Я пытаюсь проверить это действие:
export function fetchAllData(){
return dispatch => {
return $.getJSON(`${SERVER_ROOT}/data/Data1`)
.then(json => {
dispatch(receiveData1(json));
$.getJSON(`${SERVER_ROOT}/Data2`)
.then(json => {
dispatch(receiveData2(json));
$.getJSON(`${SERVER_ROOT}/Data3`)
.then(json => {
dispatch(receiveData3(json));
dispatch(requestData3(false));
});
});
});
}
}
function receiveData1(data){
return { type: RECEIVE_DATA1,
data: data
}
}
function receiveData2(data){
return { type: RECEIVE_DATA2,
data
}
}
function receiveData3(data){
return { type: RECEIVE_DATA3,
data
}
}
function requestData3(state){
return { type: REQUEST_DATA3,
state
}
}
Я получаю следующее сообщение об ошибке: тайм-аут 2000 мс exceeded.Ensure проделанная() обратного вызова в настоящее время вызванный в этом тесте.
Я предполагаю, что это может быть из-за отказа отправки. так я изменил мой призыв к
store_mock.dispatch(fetchAllData())
.then(() => { // return of async actions
expect(store_mock.getActions()).toEqual(expectedActions)
})
.then(done)
.catch(done)
Я получил эту ошибку: не определено не конструктор (около «.... поймать (сделано); ...»)
Я не уверен, что неправильный я делаю. Я имею в виду http://redux.js.org/docs/recipes/WritingTests.html Учебник Async Action Creators.
Я очень новичок в тестировании переднего конца. Было бы здорово, если кто-то может помочь мне в этом.
Заранее благодарим за ваше время и помощь.