期待(接受).toEqual(预期) - 错误(expect(received).toEqual(e

2019-10-29 23:29发布

我试图运行JS作出反应的单元测试 - 用笑话/酶。

该测试是在moment.Not很确定没有为什么,也许我没有正确地调用期望(wrapper.find)。 下面是我测试的一部分:

 File.test.js

   it('renders modal when open flag is true', () => {
 const props = { isOpen: true }; 
 const wrapper = mount(
 <div id="root">
  <Component {...props} />
</div>
);
 wrapper.update();
expect(toJson(wrapper)).toMatchSnapshot();
 expect(wrapper.find('.loa-download-header').exists()).toEqual(true);
expect(wrapper.text()).toContain(' Please enter a password.');
 });
 });

下面是File.js的部分示出了一块,我想测试作为例子的代码。

 render() {
return (
  <Modal

       <div title="Close Window" className="add-custom-field-close" onClick={() => {this.closeModal()}}><FontAwesome name='xbutton' className='fa-times' /></div>
        </div>
      </div>

      <div className='loa-download-header-wrapper'>
        <div className='loa-download-header'>
          Please enter a password.
          </div>

错误:期待(接受).toEqual(预期)

Expected value to equal:
  true
Received:
  false

对代码的任何更正将是非常有帮助谢谢

Answer 1:

我花了一些时间你的代码集成到一个沙盒。 有相当你的代码,我在下面列出了一些更改。 我还包含了一些测试,已经被填入,有些则不是。 你应该做的是花一些时间与这些变化熟悉自己,这样就可以在测试的其余部分填补containers/LOAs/__tests__ 你自己的

虽然我写的综合测试LOAs容器,我鼓励你写单元测试的小components ,让你可以练习嘲讽prop功能检查,如果他们被调用,并确保部件按预期。 尽管这将是多余的,它会帮助你理解的流动,要考什么,以及如何测试(单元测试,你要使用shallowWrap而不是mountWrap功能-或者不使用他们和使用提供shallowmount所提供的功能enzyme ......由你)。

工作示例 : https://codesandbox.io/s/p3ro0615nm

变化

  • 创建一个容器处理所有组件UIstate的变化
  • 二手this.setState() 回调 ,保持state和辅助操作同步。 同样重要的是,这也减少了不必要的组件闪烁。
  • 二手条件呈现与使用三元运算符
  • 二手lodash的filtermap ,和isEmpty功能(他们方便,我喜欢他们通过本地JS功能)
  • 嘲笑2次API调用(注意,我用setTimeout ,因为这影响你的测试)。 在fakeAPI.post功能,我添加了一个假密码来对证,因此,所提供的密码必须是12345!
  • 增加了选择的能力,并取消选择协议书。 如果需要,你可以用复选框简化了这一切。
  • methods开始handle ,而流传下来的方法与开始on
  • 打破了components/LOAModal/LOAModal.js成更小的/可重复使用的组件,使其更易于阅读
  • 新增PropType检查,以确保道具是在初始宣布和跨组件一致。

注意事项

  • 测试的主要部分是理解发生了什么在幕后,所以花时间来阅读文档 ; 并且,如果必要的话,做的更小/更简单的项目,以帮助自己熟悉如何应对工作。
  • 测试时,如果你需要看到DOMenzyme看到它,那么你可以console.log(wrapper.debug()); 里面你的it的测试。
  • 您可以利用jest.useFakeTimers()beforeEach()函数和jest.runAllTimers()afterEach()函数来模拟setTimeout功能,而无需等待实时传递。
  • 非常重要 :始终包括.catch()一后Promise (API调用)。 如果你没有catch你的承诺,那么它可能会崩溃您的应用程序。


文章来源: expect(received).toEqual(expected) - error