【发布时间】:2021-04-25 12:55:28
【问题描述】:
@craftjs/core 在我的项目中使用。 当用户拖放工具以添加到画布时,一切正常(在画布中创建的组件) 但在 cypress 中放置后未发生(组件未在画布中创建)。
在工具箱组件中: ...
const { connectors } = useEditor();
const dragStart = (e) => {
e.dataTransfer.setData('text/html', e.parentNode);
setExpanded(false);
};
...
<Accordion expanded={expanded} onChange={() => setExpanded(!expanded)}>
<AccordionSummary
expandIcon={<i className="fal fa-chevron-down" />}
aria-controls="toolbox-content"
id="ToolBoxPanel"
>
<small>ToolBox</small>
</AccordionSummary>
<AccordionDetails className="justify-content-center p-0">
<MaterialButton
aria-label="text"
onDragStart={dragStart}
variant="text"
color="secondary"
className="my-1 p-1 toolsButton mx-1"
>
<i
className="fal fa-font "
ref={(ref) => {
connectors.create(ref, <Text text="Type anything" />);
}}
/>
</MaterialButton>
。 . .
在 cypress/integration/spec.js 中
describe("Drag and Drop", () => {
beforeEach(() => {
cy.visit('/');
cy.waitForReact();
})
it('should add text componnent to canvas', () => {
cy.contains('ToolBox').click().wait(500)
cy.get('#body').then($editor=>{
cy.get('.toolsButton[aria-label="text"] i').realHover().trigger('mousedown').reactDnd($editor,{offsetX:300,offsetX:300});
cy.wait(5000);
})
})
});
在 cypress/support/commands.js 中
Cypress.Commands.add('reactDnd', {
prevSubject: 'element',
}, (sourceSelector, targetSelector, options) => {
const dataTransfer = new DataTransfer;
const opts = {
offsetX: 100,
offsetY: 100,
...(options || {})
};
cy.wrap(sourceSelector.get(0))
.trigger('dragstart', {
dataTransfer,
}).wait(1000);
cy.get(targetSelector).then($el => {
const {
x,
y,
} = $el.get(0).getBoundingClientRect();
cy.wrap($el.get(0)).realHover()
.trigger('dragover', {
dataTransfer,
}).wait(1000).trigger('mouseover').wait(1000)
.trigger('drop', {
dataTransfer,
clientX: x + opts.offsetX,
clientY: y + opts.offsetY,
}).trigger('dragend', {
dataTransfer,
}).trigger('mouseup');
})
});
【问题讨论】:
标签: javascript reactjs drag-and-drop node-modules cypress