为了账号安全,请及时绑定邮箱和手机立即绑定

React Native 测试种族 redux-saga 效果不起作用

React Native 测试种族 redux-saga 效果不起作用

婷婷同学_ 2021-09-04 17:21:07
我正在尝试测试我的一个 saga 函数,其中有一个race. 我的代码和我的测试比赛看起来几乎相同,但比赛测试似乎失败了  // in my saga  yield race({    delay: delay(waitLength),    cancel: take(smartlook.actions.cancelDelay)  });  // part of the test  .race({    delay: delay(recordTimeLength),    cancel: take(smartlookActions.cancelDelay)  })我已经验证了这一点waitLength并且recordTimeLength是相同的,因为无论如何它们都需要作为测试中上一步的一部分。的take动作都指向完全相同的动作,只是在命名进口略有不同,由于名称冲突。当我运行我的测试时,我得到SagaTestError:race expectation unmet:Expected--------{ delay:   { _40: 0,     _65: 0,     _55: null,     _72: null,     '@@redux-saga/CANCEL_PROMISE': [Function] },  cancel:   { '@@redux-saga/IO': true,     TAKE: { pattern: { [Function: actionCreator] toString: [Function] } } } }Actual:------1. { delay:   { _40: 1,     _65: 0,     _55: null,     _72:      { onFulfilled: { [Function: currCb] cancel: [Object] },        onRejected: [Function],        promise: { _40: 0, _65: 0, _55: null, _72: null } },     '@@redux-saga/CANCEL_PROMISE': [Function] },  cancel:   { '@@redux-saga/IO': true,     TAKE: { pattern: { [Function: actionCreator] toString: [Function] } } } }我不知道为什么delay测试中的代码与实际代码不同,如果有人知道这应该如何工作,请告诉我。为下面的上下文粘贴更多代码在传奇中:export function* recordThenWait(waitLength) {  const isRecording = yield select(smartlook.selectors.getSmartlookIsRecording);  if (!isRecording) {    yield put(smartlook.actions.resumeRecording());  }  yield race({    delay: delay(waitLength),    cancel: take(smartlook.actions.cancelDelay)  });  yield put(smartlook.actions.pauseRecording());}在测试中(测试不仅仅是上面的功能):  return expectSaga(Smartlook, {recordTimeLength, now})    .withState(initialState)    .dispatch(appStarted())    .put(smartlookActions.recordAppStart())    .fork(smartlook.recordThenWait, recordTimeLength)    .put(smartlookActions.resumeRecording()) //works till here    .race({      delay: delay(recordTimeLength),      cancel: take(smartlookActions.cancelDelay)    })    .put(smartlookActions.pauseRecording())    .run();
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

所以问题是它delay本身不是一个效果,而且比赛需要一个效果才能正常工作,所以我只是call在实际和测试中将比赛改为在延迟上使用a


yield race({

  delay: call(delay, waitLength),

  cancel: take(smartlook.actions.cancelDelay)

});


查看完整回答
反对 回复 2021-09-04
  • 1 回答
  • 0 关注
  • 183 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信