diff --git a/SUMMARY.md b/SUMMARY.md index 3395ad8a6..3200c2826 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -48,7 +48,6 @@ * [hasClass(className)](/docs/api/ShallowWrapper/hasClass.md) * [hostNodes()](/docs/api/ShallowWrapper/hostNodes.md) * [html()](/docs/api/ShallowWrapper/html.md) - * [invoke(event[, ...args])](/docs/api/ShallowWrapper/invoke.md) * [instance()](/docs/api/ShallowWrapper/instance.md) * [is(selector)](/docs/api/ShallowWrapper/is.md) * [isEmpty()](/docs/api/ShallowWrapper/isEmpty.md) diff --git a/docs/api/ShallowWrapper/invoke.md b/docs/api/ShallowWrapper/invoke.md deleted file mode 100644 index 185999971..000000000 --- a/docs/api/ShallowWrapper/invoke.md +++ /dev/null @@ -1,39 +0,0 @@ -# `.invoke(event[, ...args]) => Any` - -Invokes an event handler (a prop that matches the event name). - -#### Arguments - -1. `event` (`String`): The event name to be invoked -2. `...args` (`Any` [optional]): Arguments that will be passed to the event handler - -#### Returns - -`Any`: Returns the value from the event handler.. - -#### Example - -```jsx -class Foo extends React.Component { - loadData() { - return fetch(); - } - render() { - return ( - this.loadData()}> - Load more - - ); - } -} - -const wrapper = shallow(); - -wrapper.invoke('click').then(() => { - // expect() -}); -``` - -#### Related Methods - -- [`.simulate(event[, data]) => Self`](simulate.md) diff --git a/docs/api/shallow.md b/docs/api/shallow.md index c1e53a77b..77065a61a 100644 --- a/docs/api/shallow.md +++ b/docs/api/shallow.md @@ -180,9 +180,6 @@ Returns the key of the current node. #### [`.simulate(event[, data]) => ShallowWrapper`](ShallowWrapper/simulate.md) Simulates an event on the current node. -#### [`.invoke(event[, ...args]) => Any`](ShallowWrapper/invoke.md) -Invokes an event handler on the current node and returns the handlers value. - #### [`.setState(nextState) => ShallowWrapper`](ShallowWrapper/setState.md) Manually sets state of the root component. diff --git a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx index 617843443..253b11de1 100644 --- a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx +++ b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx @@ -1203,7 +1203,6 @@ describe('shallow', () => { 'hostNodes', 'html', 'instance', - 'invoke', 'is', 'isEmpty', 'isEmptyRender', diff --git a/packages/enzyme-test-suite/test/shared/methods/invoke.jsx b/packages/enzyme-test-suite/test/shared/methods/invoke.jsx deleted file mode 100644 index 122f81587..000000000 --- a/packages/enzyme-test-suite/test/shared/methods/invoke.jsx +++ /dev/null @@ -1,224 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { expect } from 'chai'; -import wrap from 'mocha-wrap'; -import sinon from 'sinon-sandbox'; -import { Portal } from 'react-is'; - -import { render } from 'enzyme'; -import getAdapter from 'enzyme/build/getAdapter'; -import { - ITERATOR_SYMBOL, - sym, -} from 'enzyme/build/Utils'; - -import { - describeIf, - itIf, -} from '../../_helpers'; -import realArrowFunction from '../../_helpers/realArrowFunction'; -import { getElementPropSelector, getWrapperPropSelector } from '../../_helpers/selectors'; -import { - is, - REACT16, -} from '../../_helpers/version'; - -import { - createClass, - createPortal, - createRef, - Fragment, -} from '../../_helpers/react-compat'; - -export default function describeInvoke({ - Wrap, - WrapRendered, - Wrapper, - WrapperName, - isShallow, - isMount, - makeDOMElement, -}) { - describe('.invoke(eventName, ..args)', () => { - it('should return the handlers return value', () => { - const spy = sinon.stub().returns(123); - class Foo extends React.Component { - render() { - return (foo); - } - } - - const wrapper = shallow(); - const value = wrapper.invoke('click'); - - expect(value).to.equal(123); - expect(spy).to.have.property('callCount', 1); - }); - - it('should invoke event handlers without propagation', () => { - class Foo extends React.Component { - constructor(props) { - super(props); - this.state = { count: 0 }; - this.incrementCount = this.incrementCount.bind(this); - } - - incrementCount() { - this.setState({ count: this.state.count + 1 }); - } - - render() { - const { count } = this.state; - return ( -
- - foo - -
- ); - } - } - - const wrapper = shallow(); - - expect(wrapper.find('.clicks-0').length).to.equal(1); - wrapper.find('a').invoke('click'); - expect(wrapper.find('.clicks-1').length).to.equal(1); - }); - - it('should pass in arguments', () => { - const spy = sinon.spy(); - class Foo extends React.Component { - render() { - return ( - foo - ); - } - } - - const wrapper = shallow(); - const a = {}; - const b = {}; - - wrapper.invoke('click', a, b); - expect(spy.args[0][0]).to.equal(a); - expect(spy.args[0][1]).to.equal(b); - }); - - describeIf(is('> 0.13'), 'stateless function components (SFCs)', () => { - it('should invoke event handlers', () => { - const spy = sinon.spy(); - const Foo = ({ onClick }) => ( -
- foo -
- ); - - const wrapper = shallow(); - - expect(spy).to.have.property('callCount', 0); - wrapper.find('a').invoke('click'); - expect(spy).to.have.property('callCount', 1); - }); - - - it('should pass in arguments', () => { - const spy = sinon.spy(); - const Foo = () => ( - foo - ); - - const wrapper = shallow(); - const a = {}; - const b = {}; - - wrapper.invoke('click', a, b); - const [[arg1, arg2]] = spy.args; - expect(arg1).to.equal(a); - expect(arg2).to.equal(b); - }); - }); - - describe('Normalizing JS event names', () => { - it('should convert lowercase events to React camelcase', () => { - const spy = sinon.spy(); - const clickSpy = sinon.spy(); - class SpiesOnClicks extends React.Component { - render() { - return (foo); - } - } - - const wrapper = shallow(); - - wrapper.invoke('dblclick'); - expect(spy).to.have.property('callCount', 1); - - wrapper.invoke('click'); - expect(clickSpy).to.have.property('callCount', 1); - }); - - describeIf(is('> 0.13'), 'normalizing mouseenter', () => { - it('should convert lowercase events to React camelcase', () => { - const spy = sinon.spy(); - class Foo extends React.Component { - render() { - return (foo); - } - } - - const wrapper = shallow(); - - wrapper.invoke('mouseenter'); - expect(spy).to.have.property('callCount', 1); - }); - - it('should convert lowercase events to React camelcase in stateless components', () => { - const spy = sinon.spy(); - const Foo = () => ( - foo - ); - - const wrapper = shallow(); - - wrapper.invoke('mouseenter'); - expect(spy).to.have.property('callCount', 1); - }); - }); - }); - - it('should batch updates', () => { - let renderCount = 0; - class Foo extends React.Component { - constructor(props) { - super(props); - this.state = { - count: 0, - }; - this.onClick = this.onClick.bind(this); - } - - onClick() { - this.setState({ count: this.state.count + 1 }); - this.setState({ count: this.state.count + 1 }); - } - - render() { - renderCount += 1; - const { count } = this.state; - return ( - {count} - ); - } - } - - const wrapper = shallow(); - wrapper.invoke('click'); - expect(wrapper.text()).to.equal('1'); - expect(renderCount).to.equal(2); - }); - }); -} diff --git a/packages/enzyme/src/ShallowWrapper.js b/packages/enzyme/src/ShallowWrapper.js index 60dbdc194..c358fac71 100644 --- a/packages/enzyme/src/ShallowWrapper.js +++ b/packages/enzyme/src/ShallowWrapper.js @@ -1106,32 +1106,6 @@ class ShallowWrapper { return this.type() === null ? cheerio() : cheerio.load('')(this.html()); } - /* - * Used to simulate events. Pass an eventname and (optionally) event arguments. - * Will invoke an event handler prop of the same name and return its value. - * - * @param {String} event - * @param {Array} args - * @returns {Any} - */ - invoke(event, ...args) { - return this.single('invoke', () => { - const handler = this.prop(propFromEvent(event)); - let response = null; - - if (handler) { - withSetStateAllowed(() => { - performBatchedUpdates(this, () => { - response = handler(...args); - }); - this.root.update(); - }); - } - - return response; - }); - } - /** * Used to simulate events. Pass an eventname and (optionally) event arguments. This method of * testing events should be met with some skepticism.