Some checks failed
Verify / Install node dependencies (push) Failing after 2s
Verify / Build packages (push) Has been skipped
Verify / Check linting & formatting (push) Has been skipped
Verify / Run unit tests (push) Has been skipped
Verify / Run e2e tests (shard 1/4) (push) Has been skipped
Verify / Run e2e tests (shard 2/4) (push) Has been skipped
Verify / Run e2e tests (shard 3/4) (push) Has been skipped
Verify / Run e2e tests (shard 4/4) (push) Has been skipped
Publish / Resolve publish config (push) Failing after 2s
Publish / Send notification to Slack (push) Has been skipped
Publish / Send failure notification to Slack (push) Failing after 8s
Verify / Merge e2e reports (push) Has been skipped
Publish / Build (push) Has been skipped
Publish / Bump Versions OR Release to Registry (push) Has been skipped
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import Document from '@tiptap/extension-document'
|
|
import Paragraph from '@tiptap/extension-paragraph'
|
|
import Text from '@tiptap/extension-text'
|
|
import { afterEach, describe, expect, it, vi } from 'vite-plus/test'
|
|
import { createApp, defineComponent, h, nextTick } from 'vue'
|
|
|
|
import { EditorContent, useEditor } from '../../src/index.js'
|
|
|
|
describe('useEditor', () => {
|
|
const mountedElements: HTMLElement[] = []
|
|
|
|
afterEach(() => {
|
|
mountedElements.forEach(element => {
|
|
if (element.parentNode) {
|
|
element.parentNode.removeChild(element)
|
|
}
|
|
})
|
|
|
|
mountedElements.length = 0
|
|
})
|
|
|
|
it('should not replace Vue-owned DOM on unmount', async () => {
|
|
const replaceChildSpy = vi.spyOn(Node.prototype, 'replaceChild')
|
|
|
|
try {
|
|
const TestComponent = defineComponent({
|
|
setup() {
|
|
// oxlint-disable-next-line react-hooks/rules-of-hooks
|
|
const editor = useEditor({
|
|
extensions: [Document, Paragraph, Text],
|
|
content: '<p>Hello World</p>',
|
|
})
|
|
|
|
return () => h(EditorContent, { editor: editor.value })
|
|
},
|
|
})
|
|
|
|
const app = createApp(TestComponent)
|
|
const target = document.createElement('div')
|
|
|
|
document.body.appendChild(target)
|
|
mountedElements.push(target)
|
|
|
|
app.mount(target)
|
|
await nextTick()
|
|
await nextTick()
|
|
|
|
expect(() => app.unmount()).not.toThrow()
|
|
expect(replaceChildSpy).not.toHaveBeenCalled()
|
|
} finally {
|
|
replaceChildSpy.mockRestore()
|
|
}
|
|
})
|
|
})
|