Reactjs 戏谑故事
问题 我正在使用redux saga、jest、redux mock store和react测试库,我尝试测试一个saga,它会轮询服务器,直到响应的状态得到解决。 在这个故事中,我使用redux-saga-delay函数来创建轮询间隔Reactjs 戏谑故事,reactjs,redux,jestjs,redux-saga,react-testing-library,Reactjs,Redux,Jestjs,Redux Saga,React Testing Library,问题 我正在使用redux saga、jest、redux mock store和react测试库,我尝试测试一个saga,它会轮询服务器,直到响应的状态得到解决。 在这个故事中,我使用redux-saga-delay函数来创建轮询间隔 const INTEVAL_TIME = 3000; function* saga(action) { try { yield delay(INTEVAL_TIME); while (true) { const { data
const INTEVAL_TIME = 3000;
function* saga(action) {
try {
yield delay(INTEVAL_TIME);
while (true) {
const { data } = yield call(apiCall);
if (data.status === 'success') {
yield put(success());
break;
}
if (data.status === 'failure') {
yield put(failure());
break;
}
yield delay(INTEVAL_TIME );
}
} catch (error) {
yield put(failure());
}
}
我如何在测试中模拟延迟不等待3秒(可能将延迟设置为0或立即解决)。
例如,这是我的测试
it('some test', async () => {
const { getByTestId } = render(<MyComponent />);
userEvent.click(getByTestId('button');
await waitFor(() => {
expect(store.getActions()).toEqual(succesPayloadMock);
});
});
it('sometest',async()=>{
const{getByTestId}=render();
点击(getByTestId('button');
等待等待(()=>{
expect(store.getActions()).toEqual(succesPayloadMock);
});
});
这个问题的解决方案实际上在redux saga的初学者教程中讨论过。简单地说,你想产生一个调用效果,而不是直接调用延迟。这个问题的解决方案实际上在 const provideDelay = ({ fn }: FnObj, next: () => void) =>
fn.name === "delayP" ? null : next();
return expectSaga(function)
.provide([{ call: provideDelay }])
.call(anotherFunction)
.run();
我不确定我是否完全理解您的问题,但当涉及到redux saga时,我使用该库并集成延迟模拟,我执行以下操作:
const provideDelay = ({ fn }: FnObj, next: () => void) =>
fn.name === "delayP" ? null : next();
return expectSaga(function)
.provide([{ call: provideDelay }])
.call(anotherFunction)
.run();