Reactjs 如何在d3组件上模拟mouseMove,以便在react中进行测试

Reactjs 如何在d3组件上模拟mouseMove,以便在react中进行测试,reactjs,testing,d3.js,enzyme,Reactjs,Testing,D3.js,Enzyme,我想测试一个使用D3的组件,它报告mouseMove事件的相关坐标。该组件在浏览器中按预期工作-我有一个简单的回调,记录坐标并记录“鼠标移动”事件: import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import { mouse, select } from 'd3-selection'; class Overlay extends Component { _handleMouseMove

我想测试一个使用D3的组件,它报告mouseMove事件的相关坐标。该组件在浏览器中按预期工作-我有一个简单的回调,记录坐标并记录“鼠标移动”事件:

import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import { mouse, select } from 'd3-selection';

class Overlay extends Component {
  _handleMouseMove(coordinates, callback) {
    console.log('Mouse moved');
    callback(coordinates);
  }

  componentDidMount() {
    this.renderD3Move();
  }
  componentDidUpdate() {
    this.renderD3Move();
  }

  renderD3Move() {
    const handleMouseMove = this._handleMouseMove;
    const callback = this.props.callback;
    const node = ReactDOM.findDOMNode(this);
    select(node).on('mousemove', function handleMouse() {
      handleMouseMove(mouse(node), callback);
    });
  }

  render() {
    return (
      <rect
        className="overlay"
        height={this.props.height}
        width={this.props.width}
      />
    );
  }
}

export default Overlay;
尽管如此,我无法编写触发回调的测试,甚至无法将“鼠标移动”消息记录到日志中:

import chai from 'chai';
chai.should();
import React from 'react';
import { mount } from 'enzyme';
import sinon from 'sinon';
import Overlay from '.';

describe('<Overlay />', function() {
  var height = 50,
    width = 50;

  it('passes mouse coordinates when mouse moves', function() {
    const callback = sinon.spy();
    var wrapper = mount(
      <Overlay height={height} width={width} callback={callback} />
    );
    wrapper.find('Overlay').simulate('mousemove');
    wrapper.find('rect').simulate('mousemove');
    wrapper.find('Overlay').simulate('mouseMove');
    wrapper.find('rect').simulate('mouseMove');
    callback.called.should.equal(true);
  });
}
我的问题是:

是否有方法从测试中触发组件中的mouseMove? 如果是,我还可以测试mouseMove事件的坐标吗? 如果与我实现组件的方式存在根本的不兼容,那么对于如何确定mouseMove事件相对于节点的坐标,是否有一个可以轻松测试的最佳实践? 没有完全解决我所问问题的相关问题