`ReactTestUtils` makes it easy to test React components in the testing framework of your choice. At Facebook we use [Jest](https://facebook.github.io/jest/) for painless JavaScript testing. Learn how to get started with Jest through the Jest website's [React Tutorial](http://facebook.github.io/jest/docs/en/tutorial-react.html#content).
> We recommend using [`react-testing-library`](https://git.io/react-testing-library) which is designed to enable and encourage writing tests that use your components as the end users do.
> Alternatively, Airbnb has released a testing utility called [Enzyme](http://airbnb.io/enzyme/), which makes it easy to assert, manipulate, and traverse your React Components' output.
To prepare a component for assertions, wrap the code rendering it and performing updates inside an `act()` call. This makes your test run closer to how React works in the browser.
For example, let's say we have this `Counter` component:
Don't forget that dispatching DOM events only works when the DOM container is added to the `document`. You can use a helper like [`react-testing-library`](https://github.com/kentcdodds/react-testing-library) to reduce the boilerplate code.
Pass a mocked component module to this method to augment it with useful methods that allow it to be used as a dummy React component. Instead of rendering as usual, the component will become a simple `<div>` (or other tag if `mockTagName` is provided) containing any provided children.
> `mockComponent()` is a legacy API. We recommend using [shallow rendering](/docs/test-utils.html#shallow-rendering) or [`jest.mock()`](https://facebook.github.io/jest/docs/en/tutorial-react-native.html#mock-native-modules-using-jestmock) instead.
Returns `true` if `element` is a React element whose type is of a React `componentClass`.
* * *
### `isDOMComponent()`
```javascript
isDOMComponent(instance)
```
Returns `true` if `instance` is a DOM component (such as a `<div>` or `<span>`).
* * *
### `isCompositeComponent()`
```javascript
isCompositeComponent(instance)
```
Returns `true` if `instance` is a user-defined component, such as a class or a function.
* * *
### `isCompositeComponentWithType()`
```javascript
isCompositeComponentWithType(
instance,
componentClass
)
```
Returns `true` if `instance` is a component whose type is of a React `componentClass`.
* * *
### `findAllInRenderedTree()`
```javascript
findAllInRenderedTree(
tree,
test
)
```
Traverse all components in `tree` and accumulate all components where `test(component)` is `true`. This is not that useful on its own, but it's used as a primitive for other test utils.
* * *
### `scryRenderedDOMComponentsWithClass()`
```javascript
scryRenderedDOMComponentsWithClass(
tree,
className
)
```
Finds all DOM elements of components in the rendered tree that are DOM components with the class name matching `className`.
* * *
### `findRenderedDOMComponentWithClass()`
```javascript
findRenderedDOMComponentWithClass(
tree,
className
)
```
Like [`scryRenderedDOMComponentsWithClass()`](#scryrendereddomcomponentswithclass) but expects there to be one result, and returns that one result, or throws exception if there is any other number of matches besides one.
* * *
### `scryRenderedDOMComponentsWithTag()`
```javascript
scryRenderedDOMComponentsWithTag(
tree,
tagName
)
```
Finds all DOM elements of components in the rendered tree that are DOM components with the tag name matching `tagName`.
* * *
### `findRenderedDOMComponentWithTag()`
```javascript
findRenderedDOMComponentWithTag(
tree,
tagName
)
```
Like [`scryRenderedDOMComponentsWithTag()`](#scryrendereddomcomponentswithtag) but expects there to be one result, and returns that one result, or throws exception if there is any other number of matches besides one.
* * *
### `scryRenderedComponentsWithType()`
```javascript
scryRenderedComponentsWithType(
tree,
componentClass
)
```
Finds all instances of components with type equal to `componentClass`.
* * *
### `findRenderedComponentWithType()`
```javascript
findRenderedComponentWithType(
tree,
componentClass
)
```
Same as [`scryRenderedComponentsWithType()`](#scryrenderedcomponentswithtype) but expects there to be one result and returns that one result, or throws exception if there is any other number of matches besides one.
> You will need to have `window`, `window.document` and `window.document.createElement` globally available **before** you import `React`. Otherwise React will think it can't access the DOM and methods like `setState` won't work.
> You will have to provide any event property that you're using in your component (e.g. keyCode, which, etc...) as React is not creating any of these for you.