簡體   English   中英

在Redux中測試異步動作創建者

[英]Testing async action creator in redux

我有以下動作創建者:

export const doSomething () {
  return (dispatch, getState) => {
    setTimeout(function () {
      dispatch(someAction('bbb'));
    }, 3000);
  }
}

它將狀態的某些部分更改為bbb ,其中狀態是通過組合化簡器創建的。 我該如何測試?

import configureMockStore from 'redux-mock-store'
import thunk from 'redux-thunk'
it('', function (done) {
  const middlewares = [ thunk ]
  const mockStore = configureMockStore(middlewares)
  const store = mockStore({}) // how should the store look like?
  return store.dispatch(someAction('bbb'))
    .then(() => {
      expect(store.getActions()).toEqual(expectedActions)
    })
});

模擬商店應該是什么樣子? 這是正確的方法嗎? 我該如何測試?

我認為您試圖在一項測試中進行太多測試,甚至更多,您正在嘗試測試不應測試的零件(例如,存儲/發貨)。

有一個原因叫它“單元測試”

我將其更改為兩個測試:

  1. reducer應該是一個純函數,給定一個輸入,它應該返回一個輸出(現在暫時忽略狀態),這里只需確保reducer已將值插入正確的位置。

  2. 操作,為派遣函數創建一個間諜並將其自己提供給操作結果函數(myAction()),並使用Expect(dispatchSpy).toHaveBeenCalledWith。 您也可以輕松創建getState函數:

     const getState = () => ({ obj1: 5, obj2: "333"}) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM