用于开发目的的Redux-Saga模拟API

时间:2019-06-15 12:32:12

标签: javascript redux mocking redux-saga

我正在使用“ redux-saga”:“ ^ 1.0.2”

我想使用redux-saga模拟我的API,但没有在线找到正确的答案。

我最终得到了一个非常基本但简单的解决方案:使用Promise。

您能给我一些有关这项技术的反馈吗?您有更好的建议吗?

import { takeEvery, call, put } from "redux-saga/effects";

let mock = 1

function getdata() {
  if (mock === 0) {
    return fetch("https://your_own_address").then(response =>
      response.json()
    );
  }
  else {
    return new Promise(function(resolve, reject) {
      resolve({data: {id: 1}})
    })
  }
}

export default function* watcherSaga() {
  yield takeEvery("GET_DATA", workerSagaGetData);
}

function* workerSagaGetData() {
  try {
    const payload = yield call(getdata);
    yield put({ type: "DATA_SUCCESS", payload });
  } catch (e) {
    yield put({ type: "DATA_ERROR", payload: e });
  }
}

1 个答案:

答案 0 :(得分:0)

您可以嘲笑fetch,即使用fetch-mock npm软件包(这是google建议的第一个软件包,也许还有其他解决方案)。

您还可以添加一些env变量来跟踪是否需要模拟,即在mock.js中的某个位置:

if (process.env.REACT_APP_MOCK_FETCH) {
    fetchMock.mock(
       'https://your_own_address',
       JSON.stringify({data: {id: 1}})
     );
}

希望有帮助。