在使用Jest和Enzyme编写的测试用例中,道具不会传递到组件内部

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在使用Jest和Enzyme编写的测试用例中,道具不会传递到组件内部相关的知识,希望对你有一定的参考价值。

这是我的测试用例

import React from 'react';
import  mount  from 'enzyme';
import CustomForm from '../index';

describe('Custom Form mount testing', () => 
  let props;
  let mountedCustomForm;
  beforeEach(() => 
    props = 
      nav_module_id: 'null',
    ;
    mountedCustomForm = undefined;
  );

  const customform = () => 
    if (!mountedCustomForm) 
      mountedCustomForm = mount(
        <CustomForm ...props />
    );
    
    return mountedCustomForm;
  ;

  it('always renders a div', () => 
    const divs = customform().find('div');
    console.log(divs);
  );
);

每当我使用yarn test运行测试用例时。它给出了以下错误TypeError: Cannot read property 'nav_module_id' of undefined

我已经在多个地方放置了控制台,以便查看道具的价值。它正在设定。但它不能只是通过组件并给出上面提到的错误。

任何帮助将被欣赏已经卡住了近2-3天。

答案

您必须在beforeEach方法中包装要测试的组件,以使其可用于所有“it”块,并且您还必须使用您认为正在进入原始组件的模拟道具。

import React from 'react'
import expect from 'chai'
import shallow from 'enzyme'
import sinon from 'sinon'
import Map from 'immutable'
import ClusterToggle from '../../../src/MapView/components/ClusterToggle'

describe('component tests for ClusterToggle', () => 

let dummydata

  let wrapper

  let props

  beforeEach(() => 

    dummydata = 
      showClusters: true,
      toggleClustering: () => 
    

    wrapper = shallow(<ClusterToggle ...dummydata />)

    props = wrapper.props()

  )

  describe(`ClusterToggle component tests`, () => 

    it(`1. makes sure that component exists`, () => 
      expect(wrapper).to.exist
    )

    it('2. makes sure that cluster toggle comp has input and label', () => 
      expect(wrapper.find('input').length).to.eql(1)
      expect(wrapper.find('label').length).to.eql(1)
    )

    it('3. simulating onChange for the input element', () => 
      const spy = sinon.spy()
      const hct = sinon.spy()
      hct(wrapper.props(), 'toggleClustering')
      spy(wrapper.instance(), 'handleClusterToggle')
      wrapper.find('input').simulate('change')
      expect(spy.calledOnce).to.eql(true)
      expect(hct.calledOnce).to.eql(true)
    )
  )
)

以上是关于在使用Jest和Enzyme编写的测试用例中,道具不会传递到组件内部的主要内容,如果未能解决你的问题,请参考以下文章

React / Enzyme:运行 Jest / Enzyme 测试时出现 Invariant Violation 错误

Jest Enzyme 测试抛出意外的令牌错误

如何为 createSlice() 的 extraReducers 编写测试(Jest + Enzyme)?

不会触发自定义事件

使用 Jest 和 Enzyme 测试使用 Redux 的功能性 React 组件

ReactWrapper::state() 只能在类组件单元测试 Jest 和 Enzyme 上调用