DEV Community

Lam
Lam

Posted on

Enzyme Cheat Sheet

References

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.some('.child')        // → boolean

wrap.someWhere(n => n.hasClass('foo'))

wrap.containsMatchingElement(<div />)         // → boolean
wrap.containsAllMatchingElements([ <div /> ]) // → boolean
wrap.containsAnyMatchingElements([ <div /> ]) // → boolean
Enter fullscreen mode Exit fullscreen mode

[ReactWrapper] Mount

wrap.mount()
wrap.unmount()
wrap.update()      // calls forceUpdate()
Enter fullscreen mode Exit fullscreen mode

[ReactWrapper] React components

wrap.setState({ ··· })
wrap.setProps({ ··· })
wrap.setContext({ ··· })
Enter fullscreen mode Exit fullscreen mode
wrap.state()         // get full state
wrap.props()         // get full props
wrap.context()       // get full context
Enter fullscreen mode Exit fullscreen mode
wrap.state('key')    // → any
wrap.prop('key')     // → any
wrap.context('key')  // → any
Enter fullscreen mode Exit fullscreen mode
wrap.instance()      // → ReactComponent
Enter fullscreen mode Exit fullscreen mode

[ReactWrapper] Actions

wrap.simulate('click')
Enter fullscreen mode Exit fullscreen mode

[ReactWrapper] Traversing

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
Enter fullscreen mode Exit fullscreen mode
wrap.get(0)           // → ReactElement
wrap.getElement()     // → ReactElement
wrap.getElements()    // → Array<ReactElement>
wrap.getDOMNode()     // → DOMComponent
Enter fullscreen mode Exit fullscreen mode

See: Full rendering API

[Installing] Jest snapshots

npm install --save-dev enzyme-to-json
Enter fullscreen mode Exit fullscreen mode

{: .-setup}

package.json

"jest": {
  "snapshotSerializers": [
    "enzyme-to-json/serializer"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Test

it('works', () => {
  wrap = mount(<MyComponent />)
  expect(wrap).toMatchSnapshot()
})
Enter fullscreen mode Exit fullscreen mode

Optional, but recommended: This allows you to use Enzyme wrappers with Jest snapshots.

See: enzyme-to-json

[Installing] Initial setup

npm install --save-dev enzyme \
  enzyme-adapter-react-16 \
  react-test-renderer
Enter fullscreen mode Exit fullscreen mode

{: .-setup}

test/setup.js

import Enzyme from 'enzyme'
import Adapter from 'enzyme-adapter-react-16'

Enzyme.configure({ adapter: new Adapter() })
Enter fullscreen mode Exit fullscreen mode

package.json

"jest": {
  "setupFiles": [
    "test/setup.js"
  ]
}
Enter fullscreen mode Exit fullscreen mode

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

[Examples] Simulating events

wrap.find('input').simulate('click')
Enter fullscreen mode Exit fullscreen mode

With event object props

wrap.find('input').simulate('change', {
  target: { value: 'hello' }
})
Enter fullscreen mode Exit fullscreen mode

[Examples] Traversions

expect(
  wrap.find('button').text()
).toEqual('Submit')
Enter fullscreen mode Exit fullscreen mode

Use .find() to traverse down to nodes. It will return wrapper objects, too.

Reference

Top comments (0)