diff --git a/SUMMARY.md b/SUMMARY.md index 257ef621c..f9d32b7b7 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -33,7 +33,7 @@ * [equals(node)](/docs/api/ShallowWrapper/equals.md) * [every(selector)](/docs/api/ShallowWrapper/every.md) * [everyWhere(predicate)](/docs/api/ShallowWrapper/everyWhere.md) - * [exists()](/docs/api/ShallowWrapper/exists.md) + * [exists([selector])](/docs/api/ShallowWrapper/exists.md) * [filter(selector)](/docs/api/ShallowWrapper/filter.md) * [filterWhere(predicate)](/docs/api/ShallowWrapper/filterWhere.md) * [find(selector)](/docs/api/ShallowWrapper/find.md) @@ -91,7 +91,7 @@ * [detach()](/docs/api/ReactWrapper/detach.md) * [every(selector)](/docs/api/ReactWrapper/every.md) * [everyWhere(predicate)](/docs/api/ReactWrapper/everyWhere.md) - * [exists()](/docs/api/ReactWrapper/exists.md) + * [exists([selector])](/docs/api/ReactWrapper/exists.md) * [filter(selector)](/docs/api/ReactWrapper/filter.md) * [filterWhere(predicate)](/docs/api/ReactWrapper/filterWhere.md) * [find(selector)](/docs/api/ReactWrapper/find.md) diff --git a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx index 7826b5dd9..d9cc3aae4 100644 --- a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx +++ b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx @@ -8,7 +8,7 @@ import isEqual from 'lodash.isequal'; import { mount, render, - ReactWrapper, + ReactWrapper, shallow, } from 'enzyme'; import { ITERATOR_SYMBOL, @@ -4753,6 +4753,14 @@ describeWithDOM('mount', () => { }); }); describe('with argument', () => { + it('throws on invalid EnzymeSelector', () => { + const wrapper = shallow(
); + + expect(() => wrapper.exists(null)).to.throw(TypeError); + expect(() => wrapper.exists(undefined)).to.throw(TypeError); + expect(() => wrapper.exists(45)).to.throw(TypeError); + expect(() => wrapper.exists({})).to.throw(TypeError); + }); it('returns .find(arg).exists() instead', () => { const wrapper = mount(
); const fakeFindExistsReturnVal = Symbol('fake .find(arg).exists() return value'); diff --git a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx index a300da970..ac8b9ed77 100644 --- a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx +++ b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx @@ -4553,6 +4553,15 @@ describe('shallow', () => { }); }); describe('with argument', () => { + it('throws on invalid EnzymeSelector', () => { + const wrapper = shallow(
); + + expect(() => wrapper.exists(null)).to.throw(TypeError); + expect(() => wrapper.exists(undefined)).to.throw(TypeError); + expect(() => wrapper.exists(45)).to.throw(TypeError); + expect(() => wrapper.exists({})).to.throw(TypeError); + }); + it('returns .find(arg).exists() instead', () => { const wrapper = shallow(
); const fakeFindExistsReturnVal = Symbol('fake .find(arg).exists() return value'); diff --git a/packages/enzyme/src/ReactWrapper.js b/packages/enzyme/src/ReactWrapper.js index ac4a3b23b..d8838aa3d 100644 --- a/packages/enzyme/src/ReactWrapper.js +++ b/packages/enzyme/src/ReactWrapper.js @@ -1077,10 +1077,7 @@ class ReactWrapper { * @returns {boolean} */ exists(selector = null) { - if (arguments.length > 0 && typeof selector !== 'string') { - throw new TypeError('`selector` argument must be a string, if present.'); - } - return typeof selector === 'string' ? this.find(selector).exists() : this.length > 0; + return arguments.length > 0 ? this.find(selector).exists() : this.length > 0; } /** diff --git a/packages/enzyme/src/ShallowWrapper.js b/packages/enzyme/src/ShallowWrapper.js index a91ad0244..78b017036 100644 --- a/packages/enzyme/src/ShallowWrapper.js +++ b/packages/enzyme/src/ShallowWrapper.js @@ -740,7 +740,7 @@ class ShallowWrapper { /** * Finds every node in the render tree of the current wrapper that matches the provided selector. * - * @param {String|Function} selector + * @param {String|Function|Object} selector * @returns {ShallowWrapper} */ find(selector) { @@ -1329,14 +1329,11 @@ class ShallowWrapper { * Returns true if the current wrapper has nodes. False otherwise. * If called with a selector it returns `.find(selector).exists()` instead. * - * @param {String|Function} selector (optional) + * @param {String|Function|Object} selector (optional) * @returns {boolean} */ exists(selector = null) { - if (arguments.length > 0 && typeof selector !== 'string') { - throw new TypeError('`selector` argument must be a string, if present.'); - } - return typeof selector === 'string' ? this.find(selector).exists() : this.length > 0; + return arguments.length > 0 ? this.find(selector).exists() : this.length > 0; } /**