Reactjs 如何用Jest测试这个Redux传奇代码?
在过去,我们使用更容易测试的Redux Thunk。在将其转化为Redux传奇之后,它看起来是这样的:Reactjs 如何用Jest测试这个Redux传奇代码?,reactjs,redux,react-redux,jestjs,redux-saga,Reactjs,Redux,React Redux,Jestjs,Redux Saga,在过去,我们使用更容易测试的Redux Thunk。在将其转化为Redux传奇之后,它看起来是这样的: import { takeLatest, put } from "redux-saga/effects"; function* fetchTasksSaga(){ try { const taskResponse = yield fetch("API URL") const tasks = yield taskResponse.json() yield put(fetchTasksSucce
import { takeLatest, put } from "redux-saga/effects";
function* fetchTasksSaga(){
try {
const taskResponse = yield fetch("API URL")
const tasks = yield taskResponse.json()
yield put(fetchTasksSuccess(tasks));
} catch (error) {
yield put(fetchTasksError(error.message));
}
}
export default function* watchFetchTasksSaga(){
yield takeLatest("FETCH_TASKS_START", fetchTasksSaga)
}
对于这个代码段,它看起来像一个笑话测试吗?它看起来像下面的代码:
describe('saga testing watchFetchTasksSaga', () => {
it('should test watchFetchTasksSaga', () => {
const gen = watchFetchTasksSaga();
expect(gen.next().value).toEqual(takeLatest("FETCH_TASKS_START", fetchTasksSaga));
});
});
describe('test fetchTasksSaga', () => {
const gen = cloneableGenerator(fetchTasksSaga)();
expect(gen.next().value).toEqual(fetch("API URL"));
it('test fetchTasksSaga success scenario', () => {
const gen1 = gen.clone();
const data = '2cd09fe0-3b6f-11ea-b05a-3b06a24be1d6';
const response = { data };
expect(gen1.next(response).value).toEqual(response.json());
expect(gen1.next().value).toEqual(
put(fetchTasksSuccess(tasks)),
);
expect(gen1.next().done).toBe(true);
});
it('should test error scenario', () => {
const gen1 = gen.clone();
const error = {
message: 'some error',
};
expect(gen1.throw(error).value).toEqual(
put(fetchTasksError(error.message)),
);
});
});
参考资料:@newtech lover上面的答案对你有帮助吗?