我试图测试在调用调度函数时是否调用了生成器函数。我正在做类似的事情:
在我的saga.js中:
{
"compilerOptions": {
// ...
"baseUrl": ".",
"paths": {
"@feathersjs/feathers": ["types/feathersjs__feathers"]
}
}
}
在Form.js中:
import { takeLatest } from 'redux-saga/effects'
import { SIGNIN_FORM_SUBMIT } from './constants'
export default function* signInFormSubmit() {
return yield takeLatest([SIGNIN_FORM_SUBMIT], function*() {
console.log("I'm in")
return yield null
})
}
在我的test.js中:
import React, { Component } from 'react'
import { connect } from 'react-redux'
import { SIGNIN_FORM_SUBMIT } from '../constants'
class SignInForm extends Component {
handleSubmit = this.handleSubmit.bind(this)
handleSubmit() {
this.props.dispatch({
type: SIGNIN_FORM_SUBMIT
})
}
render() {
return (
<div>
<button onClick={() => this.handleSubmit()}>Submit</button>
</div>
)
}
}
export default connect()(SignInForm)
我认为我的问题是我必须模拟作为参数传递给takeLatest的生成器函数。我尝试了很多事情,但没有成功。 结果显示“我在”
感谢大家的帮助:)
答案 0 :(得分:0)
查看此链接以查看传奇的示例测试:https://github.com/react-boilerplate/react-boilerplate/blob/master/app/containers/HomePage/tests/saga.test.js
您要做的是测试saga生成器函数,在您的情况下为signInFormSubmit ...
您将其导入为:
signInFormSubmitGenerator = signInFormSubmit();
然后,您需要根据每个“收益”步骤所返回的值来断言。
但是,我注意到您在生成器函数中包含了takeLatest,我认为这不是使用它的正确方法,它曾经触发过其他sagas(因此它应该在函数外部,请在此处查看结构良好的传奇示例:https://github.com/react-boilerplate/react-boilerplate/blob/master/app/containers/HomePage/saga.js,请注意takeLatest始终位于底部,并用作其上方生成器函数的入口点或触发器)