Change Log

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/airbnb/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!