186 lines
3.7 KiB
Markdown
186 lines
3.7 KiB
Markdown
---
|
|
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(<MyComponent />)
|
|
```
|
|
|
|
```js
|
|
wrap = mount(<MyComponent />)
|
|
```
|
|
|
|
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(<MyComponent />)
|
|
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<ReactElement>
|
|
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(<div />) // => boolean
|
|
wrap.contains([ <div /> ]) // => boolean
|
|
|
|
wrap.containsMatchingElement(<div />) // => boolean
|
|
wrap.containsAllMatchingElements([ <div /> ]) // => boolean
|
|
wrap.containsAnyMatchingElements([ <div /> ]) // => boolean
|
|
```
|
|
|
|
## References
|
|
|
|
- [Enzyme website](https://airbnb.io/enzyme) _(airbnb.io)_
|
|
- [Enzyme v2 cheatsheet](./enzyme@2) _(devhints.io)_ (old version)
|