/jest-react-component-mock

Mock your React Components for the amazing snapshot testing. This package allows you to avoid lots of braking tests of parent components if one child was changed internally.

Primary LanguageJavaScript

Mock your React Components for the amazing snapshot testing. This package allows you to avoid lots of braking tests of parent components if one child was changed internally.

Mock React components in your Snapshots

How to use?

anyJest.test.js:

/**
 * Function mock component and make string representation
 * @param    {String}   componentName    Name of the Component
 * @param    {Any}      props            properties, which component receives
 * @param    {Boolean}  emoji?           flag to use rocket or not
 * @return   {String}                    string representation of component
 */
function mockComponent (componentName, props, emoji) { [ 'native code' ] }

// using standard jest mocking mechanism
jest.mock('../../../pathToYourComponentWhichShouldBeMocked', () => ({
  Component: (props) => mockComponent('Component', props, true),
}));

Example 1:

tests/DemoComponent.test.js:

import { create } from 'react-test-renderer';
import { mockComponent } from 'jest-react-component-mock';

import { oneMock, secondMock, thirdMock } from '../mocks';
import { DemoComponent } from '../DemoComponent';

jest.mock('../../../components/MyCoolItem', () => ({
  MyCoolItem: (props) => mockComponent('MyCoolItem', props, 🚀),
}));

describe('DemoComponent', () => {
  it('should create simple "DemoComponent"', () => {
    const component = create(
      <DemoComponent
        prop1={oneMock}
        prop2={secondMock}
        prop3={thirdMock}
     />,
    );

    expect(component.toJSON()).toMatchSnapshot();
  });

tests/__snapshots__/DemoComponent.test.js.snap

exports[`should create simple "DemoComponent" component`] = `
<div
  className="DemoClass"
>
  <div
    className="title"
  >
    Your Title:
  </div>
  <div
    className="lol"
  >
    <div
      className="content"
    >
      
  🚀
    ≺MyCoolItem
      config={{"id": "113wsdfsdf"}}
      handker={'myHandler'}
    />
  🚀
    </div>
  </div>
</div>
`;

Example 2:

tests/DemoComponent.test.js:

import { create } from 'react-test-renderer';
import { mockComponent } from 'jest-react-component-mock';

import { oneMock, secondMock, thirdMock } from '../mocks';
import { DemoComponent } from '../DemoComponent';

jest.mock('../../../components/MyCoolItem', () => ({
  MyCoolItem: (props) => mockComponent('MyCoolItem', props),
}));

describe('DemoComponent', () => {
  it('should create simple "DemoComponent"', () => {
    const component = create(
      <DemoComponent
        prop1={oneMock}
        prop2={secondMock}
        prop3={thirdMock}
     />,
    );

    expect(component.toJSON()).toMatchSnapshot();
  });

tests/__snapshots__/DemoComponent.test.js.snap

exports[`should create simple "DemoComponent" component`] = `
<div
  className="DemoClass"
>
  <div
    className="title"
  >
    Your Title:
  </div>
  <div
    className="lol"
  >
    <div
      className="content"
    >
      
    ≺MyCoolItem
      config={{"id": "113wsdfsdf"}}
      handker={'myHandler'}
    />
    
    </div>
  </div>
</div>
`;