onBlur 函数 - setState 不正确
onBlur function - setState incorrect
我正在尝试 运行 对以下代码进行单元测试。我已经测试了 onClick 和 onChange 以及 this.props
onBlur 似乎无法根据 setState
正常工作
这是 onBlur 调用的方法
handleChange = (e) => {
let localState = Object.assign({}, this.state)
localState[e.target.name] = e.target.value
let settingsObj = {
0: {
matchValue: e.target.name,
value: e.target.value,
transformType: 'replaceElement'
}
}
if(e.target.name === 'viewtitle'){
this.props.updateViewName(e.target.value);
}
this.props.updateViewXMLValue(settingsObj)
this.setState(localState)
}
这是 onBlur 事件:
Title
</div>
<div className='tab-input-container'>
<input name='viewtitle' type='text' className="shape-dropdown" placeholder='Title' defaultValue={this.props.defaultData.viewtitle[0].length === 0 ? null : this.props.defaultData.viewtitle[0]} onBlur={this.handleChange}/>
</div>
这是我的测试文件:
it('Testing onBlur event on ViewTitle', () => {
baseProps.updateViewName.mockClear();
wrapper.setProps({
defaultData:{
viewtitle:[ [] ],
}
});
wrapper.setState({
localState: "blur"
});
wrapper.update()
wrapper.find('input[name="viewtitle"]').simulate('blur',
{
target: {
value:'blur-Test',
name:'viewtitle'
}
});
expect(baseProps.updateViewName).toHaveBeenCalled();
expect(wrapper.state('localState')).toEqual('blur-Test');
});
目标值似乎没有干扰
根据您的代码:localState[e.target.name] = e.target.value
onBlur
处理程序将状态对象 viewtitle
键设置为任何输入。
因此,如果您的原始状态是 {localState: "blur"}
,新状态将是 {localState: "blur", viewtitle: "blur-test" }
,您的测试将失败,因为它正在查看 localState
键。
我正在尝试 运行 对以下代码进行单元测试。我已经测试了 onClick 和 onChange 以及 this.props
onBlur 似乎无法根据 setState
正常工作这是 onBlur 调用的方法
handleChange = (e) => {
let localState = Object.assign({}, this.state)
localState[e.target.name] = e.target.value
let settingsObj = {
0: {
matchValue: e.target.name,
value: e.target.value,
transformType: 'replaceElement'
}
}
if(e.target.name === 'viewtitle'){
this.props.updateViewName(e.target.value);
}
this.props.updateViewXMLValue(settingsObj)
this.setState(localState)
}
这是 onBlur 事件:
Title
</div>
<div className='tab-input-container'>
<input name='viewtitle' type='text' className="shape-dropdown" placeholder='Title' defaultValue={this.props.defaultData.viewtitle[0].length === 0 ? null : this.props.defaultData.viewtitle[0]} onBlur={this.handleChange}/>
</div>
这是我的测试文件:
it('Testing onBlur event on ViewTitle', () => {
baseProps.updateViewName.mockClear();
wrapper.setProps({
defaultData:{
viewtitle:[ [] ],
}
});
wrapper.setState({
localState: "blur"
});
wrapper.update()
wrapper.find('input[name="viewtitle"]').simulate('blur',
{
target: {
value:'blur-Test',
name:'viewtitle'
}
});
expect(baseProps.updateViewName).toHaveBeenCalled();
expect(wrapper.state('localState')).toEqual('blur-Test');
});
目标值似乎没有干扰
根据您的代码:localState[e.target.name] = e.target.value
onBlur
处理程序将状态对象 viewtitle
键设置为任何输入。
因此,如果您的原始状态是 {localState: "blur"}
,新状态将是 {localState: "blur", viewtitle: "blur-test" }
,您的测试将失败,因为它正在查看 localState
键。