javascript - Ref 在浅渲染 Jest/Enzyme 期间返回 undefined
问题描述
我想测试组件中的输入 onchange 事件。我有这样的jsx:
export default class Login extends Component {
constructor(props) {
super(props);
autoBind(this);
}
handleChangeFields() {
const email = this.email.value;
const password = this.password.value;
const validationResults = {
email: isValidEmail(email),
password: password.length >= 8,
};
const isValidFields = Object.values(validationResults).every(Boolean);
}
render() {
return (
<form onSubmit={this.validateLoginForm}>
<input
type="email"
name="email"
ref={(input) => this.email = input}
placeholder="Email *"
onChange={this.handleChangeFields}
/>
<input
type="password"
name="password"
ref={(input) => this.password = input}
placeholder="Password *"
onChange={this.handleChangeFields}
/>
<input
type="submit"
value="login"
/>
</form>
);
}
}
我写了这样一个测试来测试是否handleChangeFields
被调用:
test('should call fields change method', () => {
const instance = wrapper.instance();
const spyChange = jest.spyOn(instance, 'handleChangeFields');
const input = wrapper.find('input').at(0);
input.simulate('change', { target: { value: 'test@test.com' } });
expect(spyChange).toHaveBeenCalled();
});
但我在测试调用期间出错:
TypeError: Cannot read property 'value' of undefined
但我无法弄清楚我们为什么会触发错误。我在开玩笑测试中设置了输入的值,input.simulate('change', { target: { value: 'test@test.com' } });
但仍然存在错误
解决方案
推荐阅读
- extjs - 在 ComboBox MultiSelect extjs 上加载数据
- flutter - 如何在颤动中固定 SSL 证书的公钥?
- php - PHP WebDriver - JavaScriptError: Document was unloaded
- c# - Parallel.Foreach 对并发字典中一个键的值(并发包)
- android - 如何在 Android Studio 的 Scoped Storage 中移动或重命名 Android 11 中的图像、视频文件
- sql-server - Spring批量从SQL服务器读取并写入Cassandra
- reactjs - Material-UI - 我可以选择性地启用按钮波纹吗?
- python - 停止显示适合模型的报告
- python - Discord bot 回复其消息(python)
- python - 将 groupby 的第一个元素分配给列产生 NaN