2017-07-17 27 views
0

Jester和Redux的新功能,我遇到了調度到商店,但不產生返回值的測試函數的問題。我試圖仿效從Redux website做到這一點Redux - Jest:測試函數有無效返回

return store.dispatch(actions.fetchTodos()).then(() => { 
     // return of async actions 
     expect(store.getActions()).toEqual(expectedActions) 
}) 

但是我有幾個「fetchtodos」函數不返回任何導致錯誤「類型錯誤:無法讀取屬性‘然後’未定義」由於返回undefined。我想知道我能做些什麼來測試我的模擬商店是否正確更新。有沒有辦法分配函數,等待它完成,然後比較模擬商店與預期的結果?

感謝

編輯:我們正在使用的打字稿

行動從TSX

export function selectTopic(topic: Topic | undefined): (dispatch: Redux.Dispatch<TopicState>) => void { 
    return (dispatch: Redux.Dispatch<TopicState>): void => { 

    dispatch({ 
     type: SELECT_Topic, 
     payload: topic, 
    }); 

    dispatch(reset(topic)); 
    }; 
} 

test.tsx

const middlewares = [thunk]; 
const mockStore = configureMockStore(middlewares); 

describe('Select Topic action',() => { 
    it('should create an action to select .',() => { 
    const topic: Topic = mockdata.example[0]; 
    const expectedAction = { 
     type: actions.SELECT_TOPIC, 
     payload: topic, 
    }; 

    const store = mockStore(mockdata.defaultState); 

    return store.dispatch(actions.selectTopic(topic)).then(() => { 
     expect(store.getState()).toEqual(expectedAction); 
    }); 
    }); 
}); 

的動作是我給要考什麼(還有很多其他類似的功能,我在運行測試代碼時遇到了這個未定義的錯誤函數沒有返回任何東西。

回答

0

在Redux中,商店的dispatch方法是同步的,除非您附加更改該行爲的中間件,即:返回承諾。

所以這可能是一個配置問題。確保您使用相同的中間件來設置您的測試商店,以允許您在生產中使用承諾模式。

和往常一樣,一定要模擬任何網絡請求,以避免在測試中進行api調用。

+0

感謝您的回覆。所以我們的代碼庫已經應用了ReduxThunk中間件。我正在使用redux-mock-store庫並使用所述中間件配置mockstore。給我一點時間用更通用的代碼更新我的任務。 – Exuro