使用包含常用断言的辅助对象通过Jest进行测试测试

时间:2019-02-14 10:43:51

标签: reactjs testing jestjs enzyme assertion

所以,这更多的是讨论,然后是一个问题。

我为我的react组件编写了一些测试用例,并开始复制一些断言或从其他测试中搜索DOM对象。然后我有了一个主意,为什么不使用对象,对象确实具有这些常见的断言作为辅助函数。

const HelperShallowWrapper = wrapper => ({
  dropdownShouldBeClosed: () => expect(wrapper.state('isDropdownClosed')).toBeTruthy(),
  dropdownShouldBeOpen: () => expect(wrapper.state('isDropdownClosed')).toBeFalsy(),
  inputShouldContainValue: (value: string) => expect(wrapper.find('#input').props().value).toBe(value),
  clickDropdown: () => wrapper.find('#toggle').simulate('click'),
  writeIntoVoucherInput: (value: string) =>
      wrapper.find('#input').simulate('change', { target: { value } }),
})

有了这个,我可以用更可读的方式编写测试。例如我的测试

it('should not remove code on dropdown toggle', () => {
  const wrapper = HelperShallowWrapper(<Input />)
  wrapper.clickDropdown() /* open */
  wrapper.writeIntoVoucherInput('7357-C0D3')
  wrapper.clickDropdown() /* close */
  wrapper.clickDropdown() /* open */
  wrapper.inputShouldContainValue('7357-C0D3')
})

我什至可以返回对象并将这些调用链接起来,以简化操作。我确实的确认为,如果我定义了足够的功能,这将使另一个开发人员可以更好地理解测试,甚至可以更轻松地扩展测试。此外,如果组件的更改方式使我无法像以前那样进行测试,则只需更改辅助功能。

我看到的唯一缺点是,如果测试失败,则显示测试名称,而不显示测试失败的行,而是显示辅助函数。

所以我的问题是,这是否设计过度?你们对此怎么看?

0 个答案:

没有答案