Používanie Drag & Drop je pravdepodobne jednoduchšie než kedykoľvek predtým, vďaka prakticky neobmedzenému množstvu nových front-end knižníc, ktoré každý deň pribúdajú. Implementovať Drag & Drop pre zoraditeľné trello-like tabule alebo pre nahrávanie súborov v prehliadači je tak otázkou importovania modulu a napísania nanajvýš pár riadkov, prípadne pridania nejakej konfiguračnej možnosti tu a tam.
Automatizované testovanie týchto vecí je však stále trochu v plienkach, čo môžem povedať zo skúsenosti, keďže som strávil celý deň pokusmi o to, ako napísať Cypress testovací úryvok pre funkciu Drag & Drop, ktorú ponúka skvelá knižnica svelte-dnd-action.
Po prelistovaní desiatok príspevkov na StackOverflow a vyskúšaní každého
riešenia v
tomto dlhom vlákne som
nakoniec našiel možné východisko v
tejto SO odpovedi. Odpoveď
neposkytuje úplné riešenie, ale namiesto toho tip na spustenie udalosti
mousemove dvakrát za sebou. Tu je Cypress testovací úryvok, ktorý mi
funguje:
const clientX = 300
const clientY = 500
const force = true
cy.get("[data-cy=draggable]")
.trigger("mousedown")
.trigger("mousemove", { clientX, clientY, force })
.trigger("mousemove", { clientX, clientY, force })
.wait(1)
.trigger("mouseup", { force })
Tiež mi to nefungovalo, keď som vynechal wait(1), z dôvodov, ktorým
momentálne úplne nerozumiem. Tiež si dajte pozor, aby ste na toto
nepoužívali verziu Svelte 3.38.3, kvôli
chybe.