【发布时间】:2017-11-29 02:16:47
【问题描述】:
我有一个输入,当按下“enter”键时,使用“onKeyPress”我想设置一些状态。它所做的是通过添加新的输入值来更新状态中的语言数组。
该功能有效,但测试失败。这是我的代码。
这是调用“onKeyPress”时调用的函数。
onLanguagesChange = e => {
if (e.charCode === 13 && this.state.languageEntry) {
e.preventDefault();
const language = this.state.languageEntry;
const languages = [...this.state.languages, language];
this.setState(() => ({ languages, languageEntry: '' }));
}
};
这是测试
test('it should set languages when enter key is pressed on languages input', () => {
const value = 13;
const wrapper = shallow(<Form />);
wrapper.setState({ languageEntry: 'Python' });
wrapper.setState({ languages: ['JavaScript'] });
wrapper
.find('input')
.at(1)
.simulate('keydown', {
charCode: { value }
});
expect(wrapper.state('languages')).toBe(['JavaScript', 'Python']);
});
这是组件内部的输入。 onChange 方法只是将 languageEntry 属性上的文本输入设置为状态。 从 onKeyPress 调用的方法是获取 languageEntry 值并更新状态上的语言数组。
<input
type="text"
className="text-input"
value={this.state.languageEntry}
onKeyPress={this.onLanguagesChange}
placeholder="Programming languages"
onChange={this.onLanguageChange}
/>
这是失败测试的截图。
【问题讨论】:
-
你能确定测试找到的输入是正确的吗?也许更好的选择器(使用 .text-input)或名称会更好?
-
我只是尝试添加它自己唯一的类名并改用它。仍然是同样的失败测试。
-
我认为您不需要将
value括在花括号中。通过这样做,您传递一个对象而不是一个 int 值