Testing with React's Jest and Enzyme when async componentDidMount

后端 未结 5 1889
一整个雨季
一整个雨季 2020-12-31 04:30
  • react:16.3.0-alpha.1
  • jest: \"22.3.0\"
  • enzyme: 3.3.0
  • typescript: 2.7.1

code:

class Foo extends React.PureCompo         


        
相关标签:
5条回答
  • 2020-12-31 04:30

    Solution:

    1: use the async/await syntax.

    2: Use mount (no shallow).

    3: await async componentLifecycle.

    For ex:

        test(' ',async () => {
          const wrapper = mount(
             <Foo />
          );
          await wrapper.instance().componentDidMount();
        })
    
    0 讨论(0)
  • Try this:

    it('should do something', async function() {
      const wrapper = shallow(<Foo />);
      await wrapper.instance().componentDidMount();
      app.update();
      expect(wrapper.instance().bar).toBe(100);
    });
    
    0 讨论(0)
  • 2020-12-31 04:45

    Something like this should work for you:-

     describe('...', () => {
       test('...', async () => {
         const wrapper = await mount(<Foo/>);
         expect(wrapper.instance().bar).toBe(100);
       });
     });
    
    0 讨论(0)
  • 2020-12-31 04:47

    None of the solutions provided here fixed all my issues. At the end I found https://medium.com/@lucksp_22012/jest-enzyme-react-testing-with-async-componentdidmount-7c4c99e77d2d which fixed my problems.

    Summary

    function flushPromises() {
        return new Promise(resolve => setImmediate(resolve));
    }
    
    it('should do someting', async () => {
        const wrapper = await mount(<Foo/>);
        await flushPromises();
    
        expect(wrapper.instance().bar).toBe(100);
    });
    
    0 讨论(0)
  • 2020-12-31 04:54

    Your test also needs to implement async, await.
    For ex:

      it('should do something', async function() {
        const wrapper = shallow(<Foo />);
        const result = await wrapper.instance();
        expect(result.bar).toBe(100);
      });
    
    0 讨论(0)
提交回复
热议问题