title: Jest mocked spy function, not being called in test
body: <h3>The component:</h3>
  <p>The Input component with the onChange handler:</p>
  <pre><code>&lt;Field
      component={FormattedTextInput}
      className={colMd113}
      name={NAMES.VEHICLE_YEAR}
      label={constants.VEHICLE_YEAR}
      validate={[required, validator.validateYearOfVehicle]}
      formatting=&quot;9999&quot;
      onChange={this.yearOnChange}
  /&gt;
  </code></pre>
  <p>The method:</p>
  <pre><code>constructor(props) {
      super(props);
  
      this.yearOnChange = this.yearOnChange.bind(this)
  }
  
  yearOnChange(event) {
      if (event.target &amp;&amp; event.target.value) {
          const value = event.target.value;
          this.setState({
              year: value
          });
      }
  }
  </code></pre>
  <h2>The Test</h2>
  <pre><code>it('yearOnChange method is called', function() {
      const spy = jest.spyOn(wrapper.instance(), 'yearOnChange');
      wrapper.update();
      // const instance = wrapper.instance();
      // console.log('instance', instance);
      wrapper.simulate('change', {
          target: {
              name: 'vehicleYear',
              value: '1999'
          }
      });
      expect(spy).toHaveBeenCalled();
  });
  </code></pre>
  <h3>The Error</h3>
  <pre><code>Vehicle Picker Component › yearOnChange method is called
  
     expect(jest.fn()).toBeCalled()
  
     Expected mock function to have been called, but it was not called.
  
       50 |         console.log(wrapper.instance())
       51 |
     &gt; 52 |         expect(spy).toBeCalled();
          |                     ^
       53 |     });
  </code></pre>
  <p>This is what we see when I log the <code>wrapper.instance()</code></p>
  <pre><code>VehiclePicker {
         props: {},
         context: {},
         refs: {},
         updater:
          Updater {
            _renderer:
             ReactShallowRenderer {
               _context: {},
               _element: [Object],
               _instance: [Circular],
               _newState: null,
               _rendered: [Object],
               _rendering: false,
               _forcedUpdate: false,
               _updater: [Circular],
               _dispatcher: [Object],
               _workInProgressHook: null,
               _firstWorkInProgressHook: null,
               _isReRender: false,
               _didScheduleRenderPhaseUpdate: false,
               _renderPhaseUpdates: null,
               _numberOfReRenders: 0 },
            _callbacks: [] },
         state:
          { year: '',
            make: '',
            makeArray: [],
            model: '',
            modelArray: [],
            token: '' },
         yearOnChange: [Function: bound yearOnChange],
         makeOnChange: [Function: bound makeOnChange],
         setState: [Function] }
  </code></pre>
  <h2>UPDATE</h2>
  <p>With the following code, the <code>expect(result).toEqual('1999')</code> test works! But still the <code>expect(spy).toHaveBeenCalled()</code> does not :( How is it that when I instantiate the method <code>yearOnChange</code> and actually change the state in the component, that the spy still isn't detected to have been called?</p>
  <pre><code>it('yearOnChange method is called', function() {
     const spy = jest.spyOn(VehiclePicker.prototype, 'yearOnChange');
     wrapper.instance().forceUpdate();
  
     const event = {
         target: {
             value: '1999'
         }
     };
  
     wrapper.instance().yearOnChange(event);
     wrapper.simulate('change', event);
  
     const result = wrapper.state('year');
     console.log('result', result); // result = 1999
     expect(result).toEqual('1999');
     expect(spy).toHaveBeenCalled();
  });
  </code></pre>