diff --git a/src/ECharts.ts b/src/ECharts.ts index f83b5ca..19fea5a 100644 --- a/src/ECharts.ts +++ b/src/ECharts.ts @@ -351,7 +351,6 @@ export default defineComponent({ // transition. root.value.__dispose = cleanup; } else { - /* c8 ignore next */ cleanup(); } }); diff --git a/tests/echarts-unregistered.test.ts b/tests/echarts-unregistered.test.ts new file mode 100644 index 0000000..326004c --- /dev/null +++ b/tests/echarts-unregistered.test.ts @@ -0,0 +1,48 @@ +import { describe, it, expect, beforeEach, vi } from "vitest"; +import { defineComponent, h, nextTick, shallowRef } from "vue"; + +import { render } from "./helpers/testing"; +import { enqueueChart, resetECharts, type ChartStub } from "./helpers/mock"; + +let chartStub: ChartStub; + +describe("ECharts component (wc unregistered)", () => { + beforeEach(() => { + resetECharts(); + chartStub = enqueueChart(); + }); + + it("calls cleanup directly when web component registration fails", async () => { + vi.resetModules(); + + vi.doMock("../src/wc", () => ({ + TAG_NAME: "x-vue-echarts", + register: () => false, + })); + + const { default: ECharts } = await import("../src/ECharts"); + + const exposed = shallowRef(); + const Root = defineComponent({ + setup() { + return () => + h(ECharts, { + option: { title: { text: "no-wc" } }, + ref: (v: any) => (exposed.value = v), + }); + }, + }); + + const screen = render(Root); + await nextTick(); + + chartStub.dispose.mockClear(); + + screen.unmount(); + await nextTick(); + + expect(chartStub.dispose).toHaveBeenCalledTimes(1); + + vi.doUnmock("../src/wc"); + }); +});