You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

6.1 KiB

id title permalink layout category
test-renderer Test Renderer docs/test-renderer.html docs Reference

Importing

import TestRenderer from 'react-test-renderer'; // ES6
const TestRenderer = require('react-test-renderer'); // ES5 with npm

Overview

This package provides a React renderer that can be used to render React components to pure JavaScript objects, without depending on the DOM or a native mobile environment.

Essentially, this package makes it easy to grab a snapshot of the platform view hierarchy (similar to a DOM tree) rendered by a React DOM or React Native component without using a browser or jsdom.

Example:

import TestRenderer from 'react-test-renderer';

function Link(props) {
  return <a href={props.page}>{props.children}</a>;
}

const testRenderer = TestRenderer.create(
  <Link page="https://www.facebook.com/">Facebook</Link>
);

console.log(testRenderer.toJSON());
// { type: 'a',
//   props: { href: 'https://www.facebook.com/' },
//   children: [ 'Facebook' ] }

You can use Jest's snapshot testing feature to automatically save a copy of the JSON tree to a file and check in your tests that it hasn't changed: Learn more about it.

You can also traverse the output to find specific nodes and make assertions about them.

import TestRenderer from 'react-test-renderer';

function MyComponent() {
  return (
    <div>
      <SubComponent foo="bar" />
      <p className="my">Hello</p>
    </div>
  )
}

function SubComponent() {
  return (
    <p className="sub">Sub</p>
  );
}

const testRenderer = TestRenderer.create(<MyComponent />);
const testInstance = testRenderer.root;

expect(testInstance.findByType(SubComponent).props.foo).toBe('bar');
expect(testInstance.findByProps({className: "sub"}).children).toEqual(['Sub']);

TestRenderer

TestRenderer instance

TestInstance

Reference

TestRenderer.create()

TestRenderer.create(element, options);

Create a TestRenderer instance with a passed element, which has the following methods and properties.

testRenderer.toJSON()

testRenderer.toJSON()

Return a JSON object representing the element.

testRenderer.toTree()

testRenderer.toTree()

Return a tree object representing the element.

testRenderer.update()

testRenderer.update(element)

Update the element with a passed element.

testRenderer.unmount()

testRenderer.unmount()

Unmount the element from testRenderer.

testRenderer.getInstance()

testRenderer.getInstance()

Return a root container instance.

testRenderer.root

testRenderer.root

root is a testInstance, which has the following methods and properties.

testInstance.find()

testInstance.find(test)

Find a descendant testInstance that test(testInstance) is true.

testInstance.findByType()

testInstance.findByType(type)

Find a descendant testInstance that matches the provided type.

testInstance.findByProps()

testInstance.findByProps(props)

Find a descendant testInstance that matches the provided props.

testInstance.findAll()

testInstance.findAll(test)

Find all descendant testInstances that test(testInstance) is true.

testInstance.findAllByType()

testInstance.findAllByType(type)

Find all descendant testInstances that matches the provided type.

testInstance.findAllByProps()

testInstance.findAllByProps(props)

Find all descendant testInstances that matches the provided props.

testInstance.instance

testInstance.instance

instance is a component instance of the testInstance.

testInstance.type

testInstance.type

type is a Component type of the testInstance.

testInstance.props

testInstance.props

props is a props object of the testInstance.

testInstance.parent

testInstance.parent

parent is a parent testInstance.

testInstance.children

testInstance.children

children is children of the testInstance.

Ideas

You can pass createNodeMock function to TestRenderer.create as the option, which allows for custom mock refs. createNodeMock accepts the current element and should return a mock ref object. This is useful when you test a component rely on refs.

import TestRenderer from 'react-test-renderer';

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.input = null;
  }
  componentDidMount() {
    this.input.focus();
  }
  render() {
    return <input type="text" ref={el => this.input = el} />
  }
}

let focused = false;
TestRenderer.create(
  <MyComponent />,
  {
    createNodeMock: (element) => {
      if (element.type === 'input') {
        // mock a focus function
        return {
          focus: () => {
            focused = true;
          }
        };
      }
      return null;
    }
  }
);
expect(focused).toBe(true);