具有副作用的redux异步操作的单元测试用例

时间:2018-02-15 06:09:10

标签: reactjs react-native redux

我正在开发一个react本机应用程序,我有一个redux异步操作,当用户尝试登录时调用我的API。成功登录后我更新了redux存储以及我的AsyncStorage以保持用户登录当应用程序重新启动时。

const fetch = (accessTokenInAsyncStore, navigation) => {
  return (dispatch) => {
    axios({
      method: "post",
      url: CHECK_ACCESS_TOKEN,
      headers: {
        Authorization: accessTokenInAsyncStore
      }
    })
      .then(async ({data}) => {
        const {accessToken, accessTokenExpiresIn} = camelizeKeys(data);
        dispatch(update(accessToken));
        await setAccessTokenDetailsInAsyncStore(accessToken, accessTokenExpiresIn);
      })
      .catch(() => {
        removeAccessTokenDetailsFromAsyncStore();
        const routeName = ROUTE_CONSTANTS.LoginStart;
        const params = {
          resetStoreOnLogout: true
        };
       replaceRoute (navigation, routeName, params); 
    });
  };
};


const setAccessTokenDetailsInAsyncStore = async (accessToken, accessTokenExpiresIn) => {
  const accessTokenExpirationTime = Math.floor(Date.now() / 1000) + accessTokenExpiresIn;
  await AsyncStorage.setItem(accessTokenKey, accessToken);
  await AsyncStorage.setItem(accessTokenExpirationTimeKey, JSON.stringify(accessTokenExpirationTime));
};

const removeAccessTokenDetailsFromAsyncStore = () => {
  AsyncStorage.removeItem(accessTokenKey);
  AsyncStorage.removeItem(accessTokenExpirationTimeKey);
};

我正在尝试使用redux-mock-store编写针对此方案的redux操作和reducer的单元测试用例,但我无法理解如何编写具有副作用的thunks的测试用例。

这是正确的方法还是我需要稍微修改一下我的代码?

0 个答案:

没有答案