--- title: Enzyme category: React layout: 2017/sheet updated: 2017-10-12 weight: -1 intro: | [Enzyme](http://airbnb.io/enzyme) lets you write unit tests for React components. This guide covers Enzyme 3.x. --- ## Getting started ### Mounting {: .-prime} ```js import {shallow, mount} from 'enzyme' ``` {: .-setup} ```js wrap = shallow() ``` ```js wrap = mount() ``` Shallow wrapping doesn't descend down to sub-components. A full mount also mounts sub-components. See: [Shallow rendering](http://airbnb.io/enzyme/docs/api/shallow.html), [Full rendering](http://airbnb.io/enzyme/docs/api/mount.html) ### Debugging ```js console.log(wrap.debug()) ``` Shows HTML for debugging purposes. See: [debug()](http://airbnb.io/enzyme/docs/api/ReactWrapper/debug.html) ## Installing ### Initial setup ``` npm install --save-dev enyzme \ enzyme-adapter-react-16 \ react-test-renderer ``` {: .-setup} #### test/setup.js ```js import Enzyme from 'enzyme' import Adapter from 'enzyme-adapter-react-16' Enzyme.configure({ adapter: new Adapter() }) ``` #### package.json ```js "jest": { "setupFiles": [ "test/setup.js" ] } ``` This configures Enzyme for React v16, and Jest to automatically configure Enzyme for you. There are other adapters in Enzyme's installation instructions. See: [Installation](http://airbnb.io/enzyme/#installation) ### Jest snapshots ``` npm install --save-dev enzyme-to-json ``` {: .-setup} #### package.json ```js "jest": { "snapshotSerializers": [ "enzyme-to-json/serializer" ] } ``` #### Test ```js it('works', () => { wrap = mount() expect(wrap).toMatchSnapshot() }) ``` Optional, but recommended: This allows you to use Enzyme wrappers with Jest snapshots. See: [enzyme-to-json](https://www.npmjs.com/package/enzyme-to-json) ## ReactWrapper ### Traversing ```js wrap.find('button') // => ReactWrapper wrap.filter('button') // => ReactWrapper wrap.not('span') // => ReactWrapper (inverse of filter()) wrap.children() // => ReactWrapper wrap.parent() // => ReactWrapper wrap.closest('div') // => ReactWrapper wrap.childAt(0) // => ReactWrapper wrap.at(0) // => ReactWrapper wrap.first() // => ReactWrapper wrap.last() // => ReactWrapper ``` ```js wrap.get(0) // => ReactElement wrap.getNode() // => ReactElement wrap.getNodes() // => Array wrap.getDOMNode() // => DOMComponent ``` See: [Full rendering API](http://airbnb.io/enzyme/docs/api/mount.html) ### Actions ```js wrap.simulate('click') ``` ### React components ```js wrap.setState({ ... }) wrap.setProps({ ... }) wrap.setContext({ ... }) wrap.state() // => Any (get state) wrap.props() // => object (get props) wrap.context() // => Any (get context) wrap.instance() // => ReactComponent ``` ### Mount ```js wrap.mount() wrap.unmount() wrap.update() // calls forceUpdate() ``` ### Tests ```js wrap.debug() // => string wrap.html() // => string wrap.text() // => string wrap.type() // => string | function wrap.name() // => string wrap.is('.classname') // => boolean wrap.hasClass('class') // => boolean wrap.exists() // => boolean wrap.contains(
) // => boolean wrap.contains([
]) // => boolean wrap.containsMatchingElement(
) // => boolean wrap.containsAllMatchingElements([
]) // => boolean wrap.containsAnyMatchingElements([
]) // => boolean ``` ## References - [Enzyme website](https://airbnb.io/enzyme) _(airbnb.io)_ - [Enzyme v2 cheatsheet](./enzyme@2) _(devhints.io)_ (old version)