jenesius-vue-modal
Version:
The progressive and simple modal system for Vue.js v3
107 lines (83 loc) • 2.01 kB
text/typescript
import {mount} from "@vue/test-utils";
import {closeModal, container, getQueueByNamespace, onBeforeModalClose, openModal} from "../src/index";
import wait from "./wait";
import NamespaceStore from "./../src/utils/NamespaceStore";
let wrap;
const modalQueue = getQueueByNamespace();
beforeAll(async () => {
wrap = await mount(container);
})
beforeEach(async () => {
NamespaceStore.instance.forceClean()
})
describe("onBeforeModalClose", () => {
test("onBeforeModalClose run", async () => {
let isClosed = false;
const component = {
setup() {
onBeforeModalClose(() => {
isClosed = true;
})
}
}
const modal = await openModal(component);
await modal.close();
expect(isClosed).toBeTruthy();
})
test("onBeforeModalClose next(false)", async () => {
const component = {
template: "<p>Test</p>",
setup() {
onBeforeModalClose(() => {
return false;
})
}
}
await openModal(component);
await closeModal()
.catch(() => {
})
expect(modalQueue.length).toBe(1);
})
test("onBeforeModalClose next(true)", async () => {
const component = {
setup() {
onBeforeModalClose(() => {
return true;
})
}
}
await openModal(component);
await closeModal();
expect(modalQueue.length).toBe(0);
})
test("onBeforeModalClose async next(false)", async () => {
const component = {
setup() {
onBeforeModalClose(async () => {
await wait(100);
return false;
})
}
}
await openModal(component);
try {
expect(await closeModal()).toThrow()
} catch (e) {
}
expect(modalQueue.length).toBe(1);
})
test("onBeforeModalClose async next(true)", async () => {
const component = {
setup() {
onBeforeModalClose(async () => {
await wait(100);
return true;
})
}
}
await openModal(component);
await closeModal();
expect(modalQueue.length).toBe(0);
})
})