gpt4 book ai didi

reactjs - 使用触发 Redux Saga 的操作中的值来测试 Redux Saga

转载 作者:行者123 更新时间:2023-12-02 06:26:42 26 4
gpt4 key购买 nike

我有一个运行良好的传奇,我调用一个操作并包含一些数据,传奇被触发,它从操作中提取值,执行API调用并以几个yield put结束 - 太棒了。

我现在正在尝试测试该传奇并解决问题,我已经编写了一个简单的传奇并进行测试以尝试缩小问题所在。

传奇:

function* exampleSaga() {
while(true) {
yield take('EXAMPLE_SAGA');
console.log('what is the value inside example');
const { value } = yield take('ANOTHER_ACTION')
console.log('value', value);
yield take('THIRD_TAKE')
}
}

export { exampleSaga }

测试:

describe('Saga::Example ', function() {
it('should take EXAMPLE_SAGA ', () => {
const saga = exampleSaga()

expect(saga.next().value).to.deep.equal(take('EXAMPLE_SAGA'))
expect(saga.next({
type: 'ANOTHER_ACTION',
value: 'amazing'
}).value).to.deep.equal(take('ANOTHER_ACTION'))
expect(saga.next().value).to.deep.equal(take('THIRD_TAKE'))
})
})

我期望的是,因为我正在调用 next() 并传递一个对象(一个模拟的 redux 操作),所以我应该能够从传奇中的该操作中提取值。

我得到的是:

TypeError: Cannot read property 'value' of undefined

令人沮丧的事情之一是,在我的应用程序中,使用此语法从操作中获取值的传奇是有效的:

const { value1, value2 } = yield take('ACTION_NAME')

只有当我尝试测试传奇时才会出现此问题。

感谢任何帮助。

最佳答案

它按预期工作。在您的代码中,您断言 saga 正在等待操作(而不是推送它)。因此,您必须将值对象传递给下一次迭代:

// expecting that saga waits for EXAMPLE_SAGA action
expect(saga.next().value).to.deep.equal(take('EXAMPLE_SAGA'))

// pushing EXAMPLE_SAGA action and expecting that saga waits for ANOTHER_ACTION
expect(saga.next().value).to.deep.equal(take('ANOTHER_ACTION'))

// pushing ANOTHER_ACTION and expecting that saga waits for THIRD_TAKE action
expect(saga.next({
type: 'ANOTHER_ACTION',
value: 'amazing'
}).value).to.deep.equal(take('THIRD_TAKE'))

关于reactjs - 使用触发 Redux Saga 的操作中的值来测试 Redux Saga,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39392758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com