简体   繁体   English

如何测试反应组件是否已从开关状态渲染?

[英]How to test if a react component has been rendered from a switch state?

I have a file called ModalContainer which renders child components with a switch statement based on the props. 我有一个名为ModalContainer的文件,它使用基于props的switch语句呈现子组件。

render() {
    let visibleElement = null;
    switch (this.props.modal) {
      case constants.SEARCH_AND_HIGHLIGHT_MODAL:
        visibleElement = <SearchAndHighlightModal/>;
        break;
      case constants.SAVE_SNIPPET_MODAL:
        visibleElement = <SaveSnippetModal/>;
        break;
      case constants.SNIPPET_SAVED_MODAL:
        visibleElement = <SnippetSavedModal/>;
        break;
      case constants.SAVE_SEARCH_MODAL:
        visibleElement = <SaveSearchModal/>;
        break;
      default visibleElement = null;

I'm mounting the ModalComponent and passing in props but when I try to console log the output I get ReactWrapper {} which I can't use for the assertion test. 我正在安装ModalComponent并传入道具,但是当我尝试控制日志输出时,我得到了ReactWrapper {} ,我无法用于断言测试。

Here is my test 这是我的测试

import {expect} from 'chai';
import sinon from 'sinon';
import sinonTest from 'sinon-test';
import {Map} from 'immutable';
import React from 'react';
import {shallow, mount, configure} from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import {mockStore} from '../test_helper';

//import {constants} from '../src/react/constants/constants.js';

import {ModalContainer} from '../../src/react/ModalContainer/ModalContainer';

configure({adapter: new Adapter()});

describe('Modal Container - Modal Container JSX', () => {

  describe('Render from switch case', () => {

    const fakeStore = mockStore(Map({}));

    it('Render Search And Highlight Modal', () => {

      const props = {
        constants: {
          SEARCH_AND_HIGHLIGHT_MODAL: 'search-and-highlight'
        }
      }

      const wrapper = mount(<ModalContainer store={fakeStore}
                                            visible={false}
                                            modal={false}
                                            metaData={null}
                                            {...props}
      />);
      //const visibleElement = wrapper.find();
      //const myProps = wrapper.props();
      console.log(wrapper.find('SearchAndHighlightModal'));

      //expect(wrapper.find('SearchAndHighlightModal')).to.have.lengthOf(1);

    });

  });

});

I have tested each of the child components in separate test cases and just need to test this part of the file. 我在单独的测试用例中测试了每个子组件,只需要测试该文件的这一部分。 Thanks 谢谢

To test if child component is correctly rendered you can follow the pattern given below: 要测试子组件是否正确呈现,您可以遵循以下模式:

import {shallow} from "enzyme/build";
import ThemeProvider from "./mock-themeprovider";
import React from "react";
import ParentComponent from "./ParentComponent";
import ChildComponent from "./ChildComponent";

it("Does component renders child component correctly based on type?", () => {
    const component = shallow(<ThemeProvider value="primary">
        <ParentComponent
            type={1} //for type 1 assuming it renders ChildComponent
        />
    </ThemeProvider>);
    console.log(component.debug());
    const content = component.find(ParentComponent).dive().dive().find(ChildComponent);
    expect(content.exists()).toEqual(true);
});

You may have to do multiple .dive() or not even once, based on your implementation of ParentComponent. 根据您对ParentComponent的实现,您可能必须执行多次.dive()或甚至不执行一次。

To quickly see the tree while writing test cases .debug() on shallow method saves a lot of time!!! 在浅层方法上编写测试用例时,快速查看树.debug()可以节省大量时间!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM