如何用酵素/笑话中的数据列表测试输入元素?

时间:2019-01-14 09:55:03

标签: reactjs jestjs enzyme

我最初使用的是Select元素,进行查找并测试子项以查看选项是否包含期望值。但是从那以后,我开始使用带有数据列表的Input元素,以允许自由输入形式的文本以及选择选项,但是我看不到如何测试相同的东西。

我要测试的是输入元素已呈现,并且数据列表包含预期值。

我的React代码

<input type="text" list="categories" ref={this.categoryInput} className="Modal-Comment" name="CategoryInput" value={this.state.enteredCategory} onChange={ (e) => this.handleCategoryChanged(e)}/>
    <datalist id="categories">
        {this.groupOptions.map(o => this.MakeOption(o, this.state.enteredCategory))}
    </datalist>

和我以前测试过select元素的Enyzme测试代码

  const categorySelect = wrapper.find('select').find('[name="CategoryInput"]');
  expect(categorySelect.exists()).toEqual(true);
  expect(categorySelect.children().filterWhere(x => x.text() === 'Expected option 1').length).toEqual(1);
  expect(categorySelect.children().filterWhere(x => x.text() === 'Expected option 2').length).toEqual(1);

我知道我应该更改find​​()来查找输入类型,这很好,但是后来我不知道如何在数据列表中查找生成的选项。我假设上面的测试代码返回0个匹配元素,因为数据列表不是输入的子级。在这种情况下,我应该如何测试?

2 个答案:

答案 0 :(得分:0)

由于datalist元素不是input元素的直接子元素,因此应为datalist元素创建一个单独的选择器:

const datalist = wrapper.find('#categories');

expect(datalist.children().length).toEqual(3);

答案 1 :(得分:0)

也许您应该直接测试该方法(例如,MakeOption方法)-也许在这种情况下或在其他情况下无法通过props或state来测试结果,则可能会更好。

代码应如下所示:

const wrapper = shallow(<NameOfComponent />);
expect(wrapper.instance().methodName()).toEqual(someValue);