UNPKG

vue3-dnd

Version:

Drag and Drop for Vue Composition API

76 lines (75 loc) 2.85 kB
import { createDragDropManager } from "dnd-core"; import { render, cleanup } from "@testing-library/vue"; import { useDndContextInjector } from "../DndContext"; import DndProvider from "../DndProvider"; import { TestBackend } from "react-dnd-test-backend"; import { defineComponent, h } from "vue-demi"; import { describe, afterEach, it, expect } from "vitest"; describe("DndProvider", function() { afterEach(cleanup); it("reuses DragDropManager provided to it", function() { var capturedManager; var manager = createDragDropManager(TestBackend, {}, {}); var ChildComponent = defineComponent(function() { capturedManager = useDndContextInjector(); return function() { return null; }; }); var TestComponent = defineComponent(function() { return function() { return h(DndProvider, { manager: manager }, { default: function() { return h(ChildComponent); } }); }; }); render(TestComponent); expect(capturedManager).toBe(manager); }); /* * Since @testing-library/vue still calls unmount during uninstallation and determines element.parentNode, although * our use case is correct, an error will be reported. * */ it.skip("stores DragDropManager in global context and cleans up on unmount", function() { var capturedManager; var ChildComponent = defineComponent(function() { capturedManager = useDndContextInjector(); return function() { return null; }; }); var TestProvider = defineComponent(function() { return function() { return h(DndProvider, { backend: TestBackend }, { default: function() { return h(ChildComponent); } }); }; }); var mountProvider = function() { return render(TestProvider); }; var globalInstance = function() { return global[Symbol.for("__VUE_DND_CONTEXT_INSTANCE__")]; }; // Single mount & unmount works var root = mountProvider(); expect(globalInstance()).toEqual(capturedManager); root.unmount(); expect(globalInstance()).toEqual(null); // Two mounted components do a refcount var rootA = mountProvider(); var rootB = mountProvider(); expect(globalInstance()).toEqual(capturedManager); rootA.unmount(); expect(globalInstance()).toEqual(capturedManager); rootB.unmount(); expect(globalInstance()).toEqual(null); }); });