I'm testing a d3 app which uses <svg> to draw items on the screen. I have event handlers dragstarted, dragged and dragend and also some .force() calls to add some physics to the simulation.
function dragstarted(d) {
if (!d3.event.active) simulation.alphaTarget(.03).restart();
d.fx = d.x;
d.fy = d.y;
}
function dragged(d) {
d.fx = d3.event.x;
d.fy = d3.event.y;
}
function dragended(d) {
if (!d3.event.active) simulation.alphaTarget(.03);
d.fx = null;
d.fy = null;
}
var simulation = d3.forceSimulation()
.force("center", d3.forceCenter().x(width / 2).y(height / 2))
.force("charge", d3.forceManyBody().strength(1))
.force("collide", d3.forceCollide().strength(.1).radius(30).iterations(1))
simulation
.nodes(data)
.on("tick", function(d){
node
.attr("cx", function(d){ return d.x; })
.attr("cy", function(d){ return d.y; })
});
The objects move when dragged by user, but the test does not replicate the process
cy.get(selector).eq(0)
.trigger('mousedown', { which: 1, force: true, view: window })
.trigger('mousemove', {clientX: 300, clientY: 500, force: true})
.trigger('mouseup', {position: 'top', force: true})
What am I doing wrong? Are the force methods interfering with the test (due to time-lag in settling the movement)?