2017-02-23 67 views
0

у меня есть это действие творца Я пытающийся тест:тестирования создатель действия, которое отправляет несколько создателей действий

export const fetchAllItems = (topicIds)=>{ 
    return (dispatch)=>{ 
    topicIds.forEach((topicId, index, array)=>{ 
     const last = index+1 == array.length; 
     dispatch(fetchItems(topicId, last)); 
    }); 
    }; 
}; 

Я хотел бы утверждать, что fetchItems был назван дважды - первым с 1, false и вторым с 2, true , Я попытался redux-mock-store, но не уверен, что я использую это правильно:

import configureStore from 'redux-mock-store'; 
import thunk from 'redux-thunk'; 
const middlewares = [thunk]; 
const mockStore = configureStore(middlewares); 
const store = mockStore(); 
store.dispatch(fetchAllItems([1, 2])).then(()=>{  
    console.log(store.getActions()); //Throws error: TypeError: Cannot read property 'then' of undefined 
}); 

Я также попытался насмешливо dispatch и fetchItems, но не могу получить, что работает либо.

+0

вы должны вернуть 'Promise' в возвращаемой функции от' Фета chAllItems'? –

ответ

0

Проблема с вашим кодом заключается в том, что ваш вызов .then, но ваш создатель действия не возвращает обещание (которое вам не нужно, если вам это не нужно). Вы можете изменить свои тесты на:

store.dispatch(fetchAllItems([1, 2])); 
console.log(store.getActions()); 
+0

Результатом этого 'console.log' является' [] '. Я думаю, проблема заключается в том, что 'fetchItems' не является действием. –

+0

@AndrewSamuelsen Да, я предположил, что 'fetchItems' было действием, так как вы отправляете его. – Lucas

0

Вместо того, чтобы использовать макет магазин, я обычно просто использовать spy захватить посланные действия

let dispatch = sinon.spy() 
fetchAllItems([1, 2, 3])(dispatch) 
expect(dispatch).to.have.been.calledWithMatch({ type: "...", ... }) 

Это становится все труднее, если преобразователь не приводит к отправке действие непосредственно, но вы можете использовать шпион, чтобы получить и повторить преобразователь, процесс, пока стандартные действия не отправляется

let dispatch = sinon.spy() 
fetchAllItems([1, 2, 3])(dispatch) 
let fetchItems = dispatch.getCall(0).args[0] 
fetchItems(dispatch) 
expect(dispatch).to.have.been.calledWithMatch({ type: "...", ... }) 
+0

Примечание: в утверждениях, используемых в моих примерах, используется [sinon-chai] (https://github.com/domenic/sinon-chai) –