Reactjs 如何在d3组件上模拟mouseMove,以便在react中进行测试
我想测试一个使用D3的组件,它报告mouseMove事件的相关坐标。该组件在浏览器中按预期工作-我有一个简单的回调,记录坐标并记录“鼠标移动”事件: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
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事件相对于节点的坐标,是否有一个可以轻松测试的最佳实践?
没有完全解决我所问问题的相关问题