Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用redux saga测试计划,我有一个以函数作为参数的分派操作。这使得测试总是失败_Javascript_Jestjs_Redux Saga_Redux Saga Test Plan - Fatal编程技术网

Javascript 使用redux saga测试计划,我有一个以函数作为参数的分派操作。这使得测试总是失败

Javascript 使用redux saga测试计划,我有一个以函数作为参数的分派操作。这使得测试总是失败,javascript,jestjs,redux-saga,redux-saga-test-plan,Javascript,Jestjs,Redux Saga,Redux Saga Test Plan,我有一个传奇故事可以产生一个看跌期权。put的一个参数是函数对象 我只在相关的情况下复制了saga函数: function* updateTaskTimeCancelledTimeRejectedSuccess(action) { const {payload} = action.data const tasks = yield select(getTasksSelector); const parent = yield call(findExistingTaskPare

我有一个传奇故事可以产生一个看跌期权。put的一个参数是函数对象

我只在相关的情况下复制了saga函数:

function* updateTaskTimeCancelledTimeRejectedSuccess(action) {
    const {payload} = action.data
    const tasks = yield select(getTasksSelector);
    const parent = yield call(findExistingTaskParent, tasks, action.data.taskUUID);
    if (action.type === taskActions.updateTaskCancelledTimeActions.success) {
        const currentValue = parent.taskGroup[action.data.taskUUID].time_cancelled;
        if (currentValue === null) {
            // only notify if marking rejected for the first time
            const restoreActions = yield () => [taskActions.updateTaskCancelledTimeRequest(
                action.data.taskUUID,
                {time_cancelled: null}
            )];
            const viewLink = `/task/${encodeUUID(action.data.taskUUID)}`
            yield put(displayInfoNotification("Task marked cancelled", restoreActions, viewLink))
这就是测试:

   it("updates the task state with cancelled time and sends a notification", () => {
        const action = {type: taskActions.updateTaskCancelledTimeActions.success, data: {taskUUID: "someUUID", time_cancelled: new Date().toISOString()}};
        const restoreActions = () => [taskActions.updateTaskCancelledTimeRequest(
            action.data.taskUUID,
            {time_cancelled: null}
        )];
        const viewLink = `/task/${encodeUUID(action.data.taskUUID)}`
        return expectSaga(testable.updateTaskTimeCancelledTimeRejectedSuccess, action)
            .provide([
                [select(getTasksSelector), {
                    tasksNew: {
                        1: {
                            someUUID: {
                                time_cancelled: null,
                                parent_id: 1
                            }
                        }
                    }
                }]])
            .put(displayInfoNotification("Task marked cancelled", restoreActions, viewLink))
            .run()


    })
})
这就是结果:

    SagaTestError:
    put expectation unmet:

    Expected
    --------
    { '@@redux-saga/IO': true,
      combinator: false,
      type: 'PUT',
      payload:
       { channel: undefined,
         action:
          { type: 'DISPLAY_INFO_NOTIFICATION',
            message: 'Task marked cancelled',
            restoreActions: [Function: restoreActions],
            viewLink: '/task/0000000000000000000000' } } }

    Actual:
    ------
    1. { '@@redux-saga/IO': true,
      combinator: false,
      type: 'PUT',
      payload:
       { channel: undefined,
         action:
          { type: 'DISPLAY_INFO_NOTIFICATION',
            message: 'Task marked cancelled',
            restoreActions: [Function],
            viewLink: '/task/0000000000000000000000' } } }

      at node_modules/redux-saga-test-plan/lib/expectSaga/expectations.js:48:13
      at node_modules/redux-saga-test-plan/lib/expectSaga/index.js:544:7
          at Array.forEach (<anonymous>)
      at checkExpectations (node_modules/redux-saga-test-plan/lib/expectSaga/index.js:543:18)
SagaTestError:
未满足期望:
预期
--------
{'@@redux saga/IO':对,
组合人:错,
键入:“PUT”,
有效载荷:
{频道:未定义,
行动:
{键入:“显示信息通知”,
消息:“标记为已取消的任务”,
restoreActions:[功能:restoreActions],
视图链接:'/task/0000000000000000'}}
实际:
------
1.{'@@redux saga/IO':对,
组合人:错,
键入:“PUT”,
有效载荷:
{频道:未定义,
行动:
{键入:“显示信息通知”,
消息:“标记为已取消的任务”,
恢复操作:[函数],
视图链接:'/task/0000000000000000'}}
在node_modules/redux saga测试计划/lib/expectSaga/expections.js:48:13
在节点_modules/redux saga测试计划/lib/expectSaga/index.js:544:7
在Array.forEach()处
在CheckExpections(node_modules/redux saga测试计划/lib/expectSaga/index.js:543:18)
很明显,由于restoreActions对象是另一个引用的函数,所以等式失败了。我不知道我该怎么做才能通过考试。我需要做些什么来验证这一传奇是否如我所预期的那样顺利进行?我不必验证函数的结果,只需验证displayInfoNotification是否发生


谢谢。

为您的
恢复创建一个工厂函数
lambda,然后您可以模拟它进行测试

e、 g

//模块中的某个地方
const action restorefactory=(action)=>()=>[taskActions.updateTaskCanceledTimeRequest(action.data.taskUUID,{time\u cancelled:null}]
//在你的传奇中
产量投入(displayInfoNotification(“标记为已取消的任务”、actionRestoreFactory(操作)、viewLink))
//在你的测试中
从“/your/module”导入actionRestoreFactory
jest.mock('./your/module')
actionRestoreFactory.mockReturnValue(jest.fn())
//...
返回expectSaga(testable.UpdateTaskTimeCanceledTimeRejectedSuccess,操作)
.提供([…])
.put(displayInfoNotification(“标记为已取消的任务”、actionRestoreFactory(操作)、viewLink))
.run()

它可以工作。谢谢!很高兴你成功了!