Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

enzyme

airbnb7.5mMIT3.11.0TypeScript support: definitely-typed

JavaScript Testing utilities for React

javascript, shallow rendering, shallowRender, test, reactjs, react, flux, testing, test utils, assertion helpers, tdd, mocha

readme

Enzyme

Join the chat at https://gitter.im/airbnb/enzyme

npm Version License Build Status Coverage Status

Enzyme is a JavaScript Testing utility for React that makes it easier to test your React Components' output. You can also manipulate, traverse, and in some ways simulate runtime given the output.

Enzyme's API is meant to be intuitive and flexible by mimicking jQuery's API for DOM manipulation and traversal.

Upgrading from Enzyme 2.x or React < 16

Are you here to check whether or not Enzyme is compatible with React 16? Are you currently using Enzyme 2.x? Great! Check out our migration guide for help moving on to Enzyme v3 where React 16 is supported.

Installation

To get started with enzyme, you can simply install it via npm. You will need to install enzyme along with an Adapter corresponding to the version of react (or other UI Component library) you are using. For instance, if you are using enzyme with React 16, you can run:

npm i --save-dev enzyme enzyme-adapter-react-16

Each adapter may have additional peer dependencies which you will need to install as well. For instance, enzyme-adapter-react-16 has peer dependencies on react and react-dom.

At the moment, Enzyme has adapters that provide compatibility with React 16.x, React 15.x, React 0.14.x and React 0.13.x.

The following adapters are officially provided by enzyme, and have the following compatibility with React:

Enzyme Adapter Package React semver compatibility
enzyme-adapter-react-16 ^16.4.0-0
enzyme-adapter-react-16.3 ~16.3.0-0
enzyme-adapter-react-16.2 ~16.2
enzyme-adapter-react-16.1 ~16.0.0-0 || ~16.1
enzyme-adapter-react-15 ^15.5.0
enzyme-adapter-react-15.4 15.0.0-0 - 15.4.x
enzyme-adapter-react-14 ^0.14.0
enzyme-adapter-react-13 ^0.13.0

Finally, you need to configure enzyme to use the adapter you want it to use. To do this, you can use the top level configure(...) API.

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

Enzyme.configure({ adapter: new Adapter() });

3rd Party Adapters

It is possible for the community to create additional (non-official) adapters that will make enzyme work with other libraries. If you have made one and it's not included in the list below, feel free to make a PR to this README and add a link to it! The known 3rd party adapters are:

Adapter Package For Library Status
enzyme-adapter-preact-pure preact (stable)
enzyme-adapter-inferno inferno (work in progress)

Running Enzyme Tests

Enzyme is unopinionated regarding which test runner or assertion library you use, and should be compatible with all major test runners and assertion libraries out there. The documentation and examples for enzyme use mocha and chai, but you should be able to extrapolate to your framework of choice.

If you are interested in using enzyme with custom assertions and convenience functions for testing your React components, you can consider using:

Using Enzyme with Mocha

Using Enzyme with Karma

Using Enzyme with Browserify

Using Enzyme with SystemJS

Using Enzyme with Webpack

Using Enzyme with JSDOM

Using Enzyme with React Native

Using Enzyme with Jest

Using Enzyme with Lab

Using Enzyme with Tape and AVA

Basic Usage

Shallow Rendering

import React from 'react';
import { expect } from 'chai';
import { shallow } from 'enzyme';
import sinon from 'sinon';

import MyComponent from './MyComponent';
import Foo from './Foo';

describe('<MyComponent />', () => {
  it('renders three <Foo /> components', () => {
    const wrapper = shallow(<MyComponent />);
    expect(wrapper.find(Foo)).to.have.lengthOf(3);
  });

  it('renders an `.icon-star`', () => {
    const wrapper = shallow(<MyComponent />);
    expect(wrapper.find('.icon-star')).to.have.lengthOf(1);
  });

  it('renders children when passed in', () => {
    const wrapper = shallow((
      <MyComponent>
        <div className="unique" />
      </MyComponent>
    ));
    expect(wrapper.contains(<div className="unique" />)).to.equal(true);
  });

  it('simulates click events', () => {
    const onButtonClick = sinon.spy();
    const wrapper = shallow(<Foo onButtonClick={onButtonClick} />);
    wrapper.find('button').simulate('click');
    expect(onButtonClick).to.have.property('callCount', 1);
  });
});

Read the full API Documentation

Full DOM Rendering

import React from 'react';
import sinon from 'sinon';
import { expect } from 'chai';
import { mount } from 'enzyme';

import Foo from './Foo';

describe('<Foo />', () => {
  it('allows us to set props', () => {
    const wrapper = mount(<Foo bar="baz" />);
    expect(wrapper.props().bar).to.equal('baz');
    wrapper.setProps({ bar: 'foo' });
    expect(wrapper.props().bar).to.equal('foo');
  });

  it('simulates click events', () => {
    const onButtonClick = sinon.spy();
    const wrapper = mount((
      <Foo onButtonClick={onButtonClick} />
    ));
    wrapper.find('button').simulate('click');
    expect(onButtonClick).to.have.property('callCount', 1);
  });

  it('calls componentDidMount', () => {
    sinon.spy(Foo.prototype, 'componentDidMount');
    const wrapper = mount(<Foo />);
    expect(Foo.prototype.componentDidMount).to.have.property('callCount', 1);
    Foo.prototype.componentDidMount.restore();
  });
});

Read the full API Documentation

Static Rendered Markup

import React from 'react';
import { expect } from 'chai';
import { render } from 'enzyme';

import Foo from './Foo';

describe('<Foo />', () => {
  it('renders three `.foo-bar`s', () => {
    const wrapper = render(<Foo />);
    expect(wrapper.find('.foo-bar')).to.have.lengthOf(3);
  });

  it('renders the title', () => {
    const wrapper = render(<Foo title="unique" />);
    expect(wrapper.text()).to.contain('unique');
  });
});

Read the full API Documentation

React Hooks support

Enzyme supports react hooks with some limitations in .shallow() due to upstream issues in React's shallow renderer:

  • useEffect() and useLayoutEffect() don't get called in the React shallow renderer. Related issue

  • useCallback() doesn't memoize callback in React shallow renderer. Related issue

ReactTestUtils.act() wrap

If you're using React 16.8+ and .mount(), Enzyme will wrap apis including .simulate(), .setProps(), .setContext(), .invoke() with ReactTestUtils.act() so you don't need to manually wrap it.

A common pattern to trigger handlers with .act() and assert is:

const wrapper = mount(<SomeComponent />);
act(() => wrapper.prop('handler')());
wrapper.update();
expect(/* ... */);

We cannot wrap the result of .prop() (or .props()) with .act() in Enzyme internally since it will break the equality of the returned value. However, you could use .invoke() to simplify the code:

const wrapper = mount(<SomeComponent />);
wrapper.invoke('handler')();
expect(/* ... */);

Future

Enzyme Future

Contributing

See the Contributors Guide

In the wild

Organizations and projects using enzyme can list themselves here.

License

MIT

changelog

Change Log

3.11.0

New Stuff

  • render: handle Fiber strings and numbers (#2221)

Fixes

  • shallow: Share child context logic between shallow and dive (#2296)
  • mount: children: include text nodes ($2269)
  • mount: invoke: use adapter’s wrapInvoke if present (#2158)

Docs

  • mount/shallow: closest/parent: Add missing arguments description (#2264)
  • mount/shallow: fix pluralization of “exist” (#2262)
  • shallow/mount: simulate: added functional component example to simulate doc (#2248)
  • mount: debug: add missing verbose option flag (#2184)
  • mount/shallow: update: fix semantics description (#2194)
  • add missing backticks to linked method names (#2170)
  • invoke: Add missing backticks to end of codeblock (#2160)
  • invoke: Fix typo (#2167)
  • Explicit React CSS selector syntax description (#2178)

Meta Stuff

  • [meta] add funding field
  • [meta] Update airbnb.io URLs to use https (#2222)
  • [deps] update is-boolean-object, is-callable, is-number-object, is-string, enzyme-shallow-equal, array.prototype.flat, function.prototype.name, html-element-map, is-regex, object-inspect, object-is, object.entries, object.vales, raf, string.prototype.trim
  • [dev deps] update eslint, eslint-plugin-import, eslint-plugin-markdown, eslint-plugin-react, safe-publish-latest, eslint-config-airbnb, rimraf, safe-publish-latest, karma-firefox-launcher, babel-preset-airbnb, glob-gitignore, semver, eslint-plugin-jsx-a11y

3.10.0

New Stuff

  • shallow add suspenseFallback option; support Suspense/Lazy (#1975)
  • shallow/mount: add invoke(propName)(...args) (#1856, #945)
  • shallow: Support rendering and dive()ing createContext() providers and consumers (#1966)
  • mount/shallow: add getWrappingComponent (#1960)
  • Utils: add isCustomComponent (#1960)
  • Utils: add stub argument to spyMethod
  • EnzymeAdapter: add matchesElementType (#2146)
  • RSTTraversal: add getHTMLFromHostNodes

Fixes

  • selectors: unwrap memo elements - in both directions (#2146)
  • shallow: properly determine "should render" for PureComponents (#2096)
  • mount/shallow: renderProp: improve error messages (#2070)
  • mount: setContext: use proper wrapper name in error message
  • shallow: .contains(): clean up error message
  • shallow/mount: hasClass: avoid a crash with a non-string argument (#2057)
  • mount: properly handle HTML of multiple nodes (#2052)
  • shallow: ensure that if gDSFP exists, cDU is called. (#2027)
  • shallow: Mock sCU if gDSFP defined in shallow renderer rerender (#1981)
  • mount: .state(): allow getting state from stateful children of a stateless root (#2043)
  • mount: .text(): properly recurse through fragments and arrays (#2028)

Refactors

  • ReactWrapper/ShallowWrapper: ensure calling an adapter‘s nodeToElement preserves the receiver
  • mount: use getHTMLFromHostNodes

Docs

  • explain why need to re-call .find() after update (#2140)
  • shallow: fix childAt (#2134)
  • Update v2 -> v3 migration guide re props after a stage change (#1300)
  • debug: Added documentation for verbose flag (#2104)
  • Add on the fly JSDOM include example (#2072)
  • reduce/reduceRight: fix example code (#2066, #2065, #2064)
  • update simulateError with getDerivedStateFromError (#2036)
  • shallow: .hasClass: fix use of mount
  • add link to Cheerio API and another example (#756)
  • jest: Update deprecated jest config key (#2024)

3.9.0

New Stuff

  • shallow: isEmptyRender: allow on multiple elements (#1924)
  • mount: support :focus selector (#1965)
  • shallow: Support getChildContext() (#1971)
  • shallow/mount: .find: find HTML elements by their constructor (#1933)
  • shallow/mount: selectors: support universal selector (#1945)
  • mount/shallow: add regex support to .hasClass (#1987)

Fixes

  • mount/shallow: .text/.html: handle an array of nodes properly (#2001)
  • shallow: .setProps(): only call cDU once (#2007)
  • mount: ensure findWhere doesn‘t abort early on an empty string (#1995)
  • mount: findWhere: avoid passing empty wrappers to predicate
  • mount: text() via findWhere: return the string for a wrapper around a string
  • mount/shallow: Fix .exists not accepting any EnzymeSelector (#1934)
  • mount: Recursive isEmptyRender (#1924)
  • mount: setState: allow setting state on a class child of an SFC root

Documentation

  • [jest] update Jest to setupFilesAfterEnv (#2015)
  • [jest] Change deprecated setupTestFrameworkScriptFile to setupFilesAfterEnv (#2013)
  • mount: setState: note that you can now call it on "not the root" (#2010)
  • general improvements (#1947)
  • Fix typos (#1992)
  • Added missing pages: isEmptyRender, renderProp, equals, SystemJS guide (#1984, #1985)
  • Fix link to .shallow() (#1951)
  • update jsdoc to use "EnzymeSelector" where applicable

Meta Stuff

  • add "directory" field to package.json

3.8.0

New Stuff

  • shallow/mount: add renderProp (#1863, #1891)

Fixes

  • shallow/mount: improve error message for "single node" assertion (#1904)
  • shallow: shallow compare, not deep compare, state and props to determine rerendering (#1915)

Documentation

  • shallow: dive: add a note about throwing an error (#1905)
  • selectors: update redisplayName` (#1932)
  • shallow: get: fixed wrong props() usage (#1921)
  • shallow: html: shallow renders full tree (#1912)
  • Updated broken link for “.hostNodes()” in migration guide from enzyme 2 to 3 (#1909)
  • Add tape example project link (#1898)
  • prop: fix typo (#1883)
  • Document full support for attribute selectors (#1881)
  • Documentation update for testing React Native with jsdom (#1873)
  • Update JSDOM docs to include {request|cancel}AnimationFrame polyfills (#1867)
  • mount: ref: use correct type (#1865)

3.7.0

New Stuff

  • mount: .state()/.setState(): allow calling on children (#1802, @ljharb)
  • configuration: add reset (commit)

Fixes

  • makeOptions: ensure that config-level attachTo/hydrateIn are inherited into wrapper options (#1836, @ljharb)
  • shallow/Utils: call into adapter’s isCustomComponentElement if present (#1832, @SinHouse)
  • shallow/mount: throw an explicit error when state is null/undefined (commit)
  • freeze ROOT_NODES for child wrappers (#1811, @jgzuke)
  • shallow: .parents: ensure that one .find call does not affect another (#1781, @ljharb)
  • mount: update after simulateError (#1812, @jgzuke)

Refactors

  • mount/shallow: getElement: use this.single (commit)

3.6.0

New Stuff

  • shallow/mount: add simulateError (#1797, @ljharb)

3.5.1

Fixes

  • shallow/mount: containsMatchingElement: trim whitespace (commit, #636)
  • debug: inspect objects instead of showing them as <Component /> (commit)

Documentation

  • mount: ref: Update docs to be consistent with v3 (#1242, @adam-golab)

Refactors

  • shallow/mount: make tests and method ordering more consistent (commit)
  • RSTTraversal: remove unnecessary adapter truthiness check (commit)

3.5.0

New Stuff

Fixes

  • preemptively fix compat with React v16.4.3 (#1790, #1778, @gaearon, @aweary)
  • shallow: prevent rerenders with PureComponents (#1786, @koba04)
  • shallow: skip updates when nextState is null or undefined (#1785, @koba04)
  • shallow: setState after setProps calls componentWillReceiveProps (#1779, @peanutenthusiast)
  • mount/shallow: be stricter on the wrapper’s setState/setProps callback (commit)
  • shallow/mount: improve error message when wrapping invalid elements (#1759, @jgzuke)

Refactors

  • remove most uses of lodash (commit)

Meta Stuff

  • ensure a license and readme is present in all packages when published

3.4.4

Fixes

  • @koba04: shallow: fix unexpected call to componentDidMount (#1768)

3.4.3

Fixes

  • @ljharb/@koba04: shallow: .setState(): stub out setState on non-root code paths as well (#1763)
  • @ljharb: shallow/mount: restore fallback when adapter lacks invokeSetStateCallback (commit)
  • @ljharb: mount: setState: invoke callback with the proper receiver (commit)
  • @ljharb: mount: state and setState should throw an explicit error message when called on an SFC (commit)

3.4.2

Fixes

  • @koba04: shallow: call cDU when an instance calls setState (#1742)
  • @ReactiveRaven: selectors: fix descendant selector (#1680)

3.4.1

Fixes

  • @ljharb: shallow: setProps: merge instead of replace props (commit)

Documentation

  • @koba04: Fix an adapter table style in README.md and a migration guide (#1734)

3.4.0

New Stuff

  • @madicap: shallow/mount: account for React.Fragment nodes (#1733)
  • @jquense: Debug: debugNode now returns [function] for function children (commit)
  • @ljharb: mount: add hydrateIn option (#1707)
  • @ljharb: shallow: add “lifecycles” adapter option (#1696)
  • @krawaller: shallow/mount: allow .exists() to take an optional selector (#1695)
  • @koba04: shallow: Add getSnapshotBeforeUpdate support (#1657)
  • @jquense: shallow/mount: Add support for some pseudo selectors (#1537)
  • @blainekasten: debug: Implement verbose debug output (#1547)
  • @jquense/@ljharb: Debug: typeName now calls the adapter’s displayNameOfNode if available (#1701)
  • @jquense/@ljharb: mount/shallow: .name(): call into adapter’s displayNameOfNode, if present (#1701)
  • @jquense/@ljharb: Utils: nodeHasType: call into adapter’s displayNameOfNode, if present (#1701)
  • @jquense/@ljharb: selectors: buildPredicate: call into adapter’s isValidElementType, if present (#1701)
  • @emuraton/@ljharb: shallow: setProps(): Add callback argument (#1721)
  • @ljharb: mount: add .equals() (commit)
  • @madicap: Extract getAdapter from Utils into its own file (#1732)

Fixes

  • @ljharb: shallow/mount: matchesElement/containsMatchingElement: get adapter with options (commit)
  • @ljharb: RSTTraversal: remove nodeHasProperty export; broken since #1157 (commit)
  • @ljharb/@KordonDev: shallow: .at(): return an empty wrapper when an index does not exist (#1478)
  • @ljharb: shallow: .equals(): flatten children when comparing (commit)
  • @ljharb: mount/shallow: do not dedupe in flatMap (commit)
  • @ljharb: shallow: .closest(): ensure an empty wrapper is returned for no match (commit)
  • @krawaller: selectors: make general sibling not throw on root (#1698)
  • @ljharb/@angelikatyborska : mount: text(): null nodes return null (#1582)
  • @ljharb: shallow: simulate: ensure it returns itself (commit)
  • @koba04: shallow: ShallowWrapper calls update() automatically (#1499)
  • @bdwain: mount/shallow: return null for missing keys (#1536)
  • @vsiao: Fix ShallowWrapper for array-rendering components (#1498)
  • @koba04: Call setState callback after finishing the render (#1453)
  • @eddyerburgh: Convert nodes to RST nodes before comparing (#1423)
  • @ljharb: improve "bad adapter" error message (#1477)
  • @ljharb: shallow/mount: default iterator should be iterable (commit)

Refactors

  • @ReactiveRaven: selectors: fix typos; avoid reusing variable unnecessarily (#1681)
  • @koba04/@ljharb: shallow: Use spyMethod to inspect the result of shouldComponentUpdate/getSnapshotBeforeUpdate (#1192)
  • @ljharb: Utils: configuration: change to named exports. (commit)
  • @ljharb: use array.prototype.flat (commit)

Documentation

  • @jack-lewin: Clarify dev workflow in CONTRIBUTING.md (#1207)
  • @robrichard: Provide migration instructions for ref(refName) (#1470)
  • @DannyDelott: shallow/mount: Add callback arg to setProps header (#1361)
  • @conor-cafferkey-sociomantic: mount: Updated docs for ReactWrapper.instance(); remove docs for v2's getNode()/getNodes() (#1714)
  • @koba04: Make clearer the docs for .mount() (#1540)
  • @ialexryan: Update signature of .type() in shallow.md (#1492]([https://github.com/enzymejs/enzyme/pull/1492))

Meta Stuff

  • @ljharb: ensure a license and readme is present in all packages when published
  • @ljharb: [meta] fix package.json scripts

3.3.0

New Stuff

  • @ljharb/@joeldenning: debug: handle boxed primitives (#1450)

Refactors

  • @eddyerburgh: Use RSTTraversal childrenOfNode in Utils (#1381)

Fixes

  • @nicoder: Fix typo in error message (#1379)

3.2.0

New Stuff

  • @aweary: Support all attribute selector operators (#1157)

Fixes

  • @idanilt: Change ShallowWrapper.text() trim spaces with same behavior as ReactWrapper.text() (#1350)

3.1.1

Fixes

  • @koba04: Fix to call componentDidUpdate on setState of React v16 (#1261)

3.1.0

New Stuff

  • @FezVrasta: Added hostNodes method to ReactWrapper (#1179)

Fixes

  • @lelandrichardson: Add an npmignore file to all packages (#1204)

  • @neoziro: Fix node resolving in React 16 adapter (#100)

  • @graingert: upgrade to rst-selector-parser@^2.2.2 (#1146)

Documentation

  • @lelandrichardson: Symlink readme to all packages (#1205)

  • @AndersDJohnson: fix some typos (#1165)

  • @dubbha: ES5 setup file correction (#1194)

  • @morrowr08: updated component name being used in example (#1180)

  • @apandichi: Fixing a few typos... (#1171)

  • @nuc: Fix typo (#1142)

3.0.0

Breaking Changes

Enzyme has several breaking changes from v2 to v3. Please check out our migration guide for more info. Since there was a rewrite of the core library from v2 to v3, it is hard to categorize changes in terms of sem

  • @lelandrichardson: Refactor enzyme to use Adapters, initial React 16 support (#1007)

  • @lelandrichardson: Make private properties more private and harder to use (#1083)

  • @ljharb: [breaking] update cheerio to v1 (#1093)

  • @aweary: Integrate with a CSS parser for selector parsing (#1086)

  • @vadimdemedes: Skip undefined props when comparing nodes (#662)

  • @koba04: Breaking: lifecycleExperimental by default (#1140)

New Stuff

  • @lelandrichardson: Move to lerna repo structure, multiple modules (#1074)

  • @lelandrichardson: Remove all React dependencies from enzyme (#1084)

  • @lelandrichardson: Add public root method (#1127)

Fixes

  • @aweary: Remove isFunctionalComponent, use nodeType instead (#1076)

  • @LarsHassler: props not merged when shallow rendering in lifecycleExperimental (#1088)

  • @ljharb: [Fix] mount: do not mutate Component.contextTypes (#1099)

  • @ljharb: [Fix] reduce/reduceRight: follow Array#reduce when omitting initialValue (#673)

  • @koba04: Fix componentDidUpdate when updating by setState on v16 (#1133)

  • @koba04: Fix componentDidUpdate no longer receives prevContext on React v16 (#1139)

Documentation

  • @ghost: added sinon to mocha guide (#1075)

  • @samit4me: Update to GitBook 3 (#1039)

  • @therewillbecode: Removed extraneous brackets from example in readme (#1117)

  • @silvenon: Add note that mount() requires cleanup (#1043)

  • @lelandrichardson: Add docs reflecting v3 (#1121)

2.9.1

Fixes

  • [Deps] Require uuid at least 3.0.1 (#1001)

2.9.0

New Stuff

  • mount/shallow: debug: add ignoreProps option (#960)

Fixes

  • shallow: debug: fix indentation (#926)
  • react-compat: Make sure dependency error reporting always work (#929)
  • react-compat: correct error message (#904)

Documentation

  • lint our markdown (#988)
  • correct nvm install instructions (never install it with homebrew) (#988)
  • fix typos (#979), (#983)
  • Added missing isEmptyRender() docs
  • update jsdom guides for v10 and later (#921)

Refactors

  • shallow/mount: Make all references to the wrapper class call into this.wrap
  • update uuid from v2 to v3 (#998)

2.8.2

Fixes

  • Loosen react-compat implicit dependency logic for React 15.4 (#896)

Documentation

  • Update docs to use prop-types (#894, #890)

2.8.1

Fixes

  • support React@15.5 (#876)
  • no longer depend on React.createClass (#877)
  • Throw for malformed compound selectors (#868)

2.8.0

New Stuff

  • add disableLifecycleMethods for shallow (#789)
  • Match children before and after interpolation (#512)
  • Supporting passing context to static rendering (#429)

Fixes

  • Fix an issue w/ cleaning up global.document (#855)
  • Update props when shouldComponentUpdate returns false and lifecycleExperimental is on (#807)
  • Properly pass along options in dive (#771)

2.7.1 (January 22, 2017)

Fixes

  • mount: Fix bug from (#677 (#680)
  • mount: ignore text nodes in childrenOfInst (#604)

Documentation

  • Update Docs for .getNode and .getNodes (#743)
  • Add a link for ShallowWrapper#dive() (#759
  • Fix alphabetical order of API lists (#761)

2.7.0 (December 21, 2016)

New Stuff

  • shallow/mount: Add .slice() method (#661)
  • mount: implement ReactWrapper#getDOMNode (#679)
  • shallow/mount: Add exists; deprecate isEmpty() (#722)

Fixes

  • mount: extract MountedTraversal.hasClassName from MountedTraversal.instHasClassName, which allows ReactWrapper.hasClass to bypass the !isDOMComponent(inst) call (#677)
  • withDom: Display a useful error when withDom fails to find "jsdom" (#686)
  • mount: ensure that react-text comment nodes don’t break .find (#691)
  • mount: .parents() now filters out sibling path trees (#713)

2.6.0 (November 9, 2016)

New Stuff

  • ensure ShallowWrapper render output can't get stale (#490)

Fixes

  • Use shim to detect constructor function name (#659)
  • mount/shallow: fix ID selectors (#670)

2.5.2 (November 9, 2016)

Fixes

  • Use shim to detect constructor function name (#659)
  • mount/shallow: fix ID selectors (#670)

2.5.1 (October 17, 2016)

Patches

  • continue to support one-argument single (#632)

2.5.0 (October 17, 2016)

Minor Changes

  • pass callback on setState and setProps (#617)

  • Make ReactWrapper and ShallowWrapper iterable (#594)

  • add .dive() method to shallow (#618)

Patches

  • Warn if selector contains a pseudo-class (#591)

  • change isCompoundSelector to not match prop selector (#595)

  • fixed hasClassName in case className is not a string and has toString method (#518)

  • Throw if some() is called on a root wrapper (#523)

  • Fix valid + falsy propvalues (#563)

2.4.2 (November 9, 2016)

Fixes

  • Use shim to detect constructor function name (#659)
  • mount/shallow: fix ID selectors (#670)

2.4.1 (July 8, 2016)

Patches

  • Fix backwards incompatible shouldComponentUpdate call (#491)

2.4.0 (July 7, 2016)

Minor Changes

  • Support all Component Lifecycle methods in ShallowRenderer (behind an experimental flag) (#318)

  • Add an isEmptyRender() method to both ShallowWrapper and ReactWrapper (#339)

  • Add support for batched updates with ShallowRender.simulate (#342)

Patches

  • Switch to using classList instead of className (#448)

  • fixes mount().debug() output with mixed children (#476)

  • Support additional characters in attribute selectors (#412)

  • fix id selector not working when combined with a tag selector (#387)

  • Support spaces in attribute selector values (#427)

2.3.0 (May 9, 2016)

Minor Changes

  • add .tap() method to ShallowWrapper and ReactWrapper (#299)

  • add .key() method to ShallowWrapper and ReactWrapper (#327)

  • add support for descendent selectors, >, ~ and + (#217)

  • new containsMatchingElement, containsAllMatchingElements, and containsAnyMatchingElements APIs (#362)

  • new .name() method (#335)

Patches

  • add dblclick to eventType map for simulate (#317)

  • fix pathToNode bug with child-containing children (#296)

  • prioritize displayName over name for consistency in .debug() (#332)

  • handle insignificant whitespace in className (#348)

  • fix handling of SFC components and .instance() (#359)

  • reduce false positives by using argument validation for .contains (#259)

  • fix equality algorithm so that non-renderable nodes are equivalent (#192)

  • add better error handling for state, setState, and context (#373)

2.2.0 (March 21, 2016)

Minor Changes

  • add options param to ShallowWrapper::shallow (#275)

Patches

  • make enzyme compatible with all React 15 RCs (#272)

  • increase coverage for Stateless Functional Components (#267)

  • improve context support for Stateless Functional Components (#256)

  • fix tree traversal for Stateless Functional Components (#257)

  • fix .find for nested Stateless Functional Components (#274)

  • fix .props() and .debug() methods for Stateless Functional Components (#255)

  • prevent falsy nodes from being counted as children (#251)

2.1.0 (March 10, 2016)

Minor Changes

  • add support for React 15.0.0-rc.1 (#240)

  • add .unmount() method for ShallowWrapper (#215)

  • add direct imports for mount, shallow, and render (#198)

  • add a .childAt(n) shorthand method (#187)

Patches

  • fix bug in .contains() for matching sub-arrays (#226)

  • fix bug in matching by type displayName (#230)

  • add more useful warnings for missing implicit dependencies (#228)

  • improve SFC support for .type() (#196)

  • fix null handling for .html() and .render() (#196)

  • moved from underscore to lodash (#189)

2.0.0 (February 10, 2016)

Major Changes (breaking)

  • removed describeWithDOM utility (#159)

  • removed useSinon, spyPrototype and spyLifecycle utilities (#159)

  • removed sinon dependency (#159)

  • removed jsdom dependency (#159)

1.6.0 (February 10, 2016)

Minor Changes

  • add option for childContextTypes of ReactWrapper (#171)

Patches

  • Prevent null or false nodes from being passed into tree traversal (#174)

  • setProps no longer swallows exceptions (#170)

  • .type() and .props() should not fail on null now (#162)

1.5.0 (February 2, 2016)

Minor Changes

  • Add attachTo option to mount to mount to a specific element (#160)

  • Add .debug() method to ReactWrapper (#158)

  • Add .mount() and .unmount() APIs to ReactWrapper (#155)

  • Add .render() method to ReactWrapper (#156)

  • Allow .contains() to accept an array of nodes (#154)

  • Add .context() method to ReactWrapper and ShallowWrapper (#152)

Patches

  • Fixed some behavior with .contains() matching on strings (#148)

  • Fixed .debug()'s output for numeric children (#149)

  • Documentation fixes

  • Update versions of dependencies

1.4.1 (January 24, 2016)

Patches

  • Upgrade to babel 6 (#81)

  • Fix event naming bug in ShallowWrapper (#135)

  • Documentation fixes

1.4.0 (January 21, 2016)

Minor Changes

  • describeWithDOM enhancement (#126)

  • add .equals() method to ShallowWrapper (#124)

  • add object selector syntax (#110)

Patches

  • Fixed confusing behavior of prop selector syntax (#130)

  • Documentation fixes

1.3.1 (January 15, 2016)

Patches

  • Fix setProps not passing old context (#121)

  • Map lowercase mouse events in simulate (#77)

1.3.0 (January 13, 2016)

Minor Changes

  • Added .html() method to ReactWrapper (#71)

  • Support property selector (i.e. [prop="foo"]) (#70)

  • jsdom dependency now allows a range of supported versions (#95)

Patches

  • Normalized setProps() behavior between mount/shallow to merge props (#103)

  • Exclude _book from published package (#85)

  • Various documentation, tests, and style changes

1.2.0 (December 10, 2015)

Minor Changes

  • Support for context (#62)

Patches

  • nodeHasId fix for some 0.14 corner cases (#65)

1.1.0 (December 7, 2015)

Minor Changes

  • Support for Stateless Functional Components (#53)

Patches

  • Tweak describeWithDOM messaging (#48)
  • Documentation Fixes

1.0.0 (December 3, 2015)

  • Official Release!