diff --git a/src/__tests__/__snapshots__/render.test.js.snap b/src/__tests__/__snapshots__/render.test.js.snap index a31cf2e..e6c67fa 100644 --- a/src/__tests__/__snapshots__/render.test.js.snap +++ b/src/__tests__/__snapshots__/render.test.js.snap @@ -18,7 +18,6 @@ exports[`render > should accept svelte component options 1`] = ` -
diff --git a/src/__tests__/cleanup.test.js b/src/__tests__/cleanup.test.js new file mode 100644 index 0000000..7abd1dd --- /dev/null +++ b/src/__tests__/cleanup.test.js @@ -0,0 +1,30 @@ +import { describe, expect, test, vi } from 'vitest' + +import { cleanup, render } from '..' +import Mounter from './fixtures/Mounter.svelte' + +const onMounted = vi.fn() +const onDestroyed = vi.fn() +const renderSubject = () => render(Mounter, { onMounted, onDestroyed }) + +describe('cleanup', () => { + test('cleanup unmounts component and deletes element', () => { + renderSubject() + + cleanup() + + expect(onDestroyed).toHaveBeenCalledOnce() + expect(document.body).toBeEmptyDOMElement() + }) + + test('cleanup handles unexpected errors during mount', () => { + onMounted.mockImplementation(() => { + throw new Error('oh no!') + }) + + expect(renderSubject).toThrowError() + cleanup() + + expect(document.body).toBeEmptyDOMElement() + }) +}) diff --git a/src/__tests__/fixtures/Mounter.svelte b/src/__tests__/fixtures/Mounter.svelte index 477bb34..ba7cf7a 100644 --- a/src/__tests__/fixtures/Mounter.svelte +++ b/src/__tests__/fixtures/Mounter.svelte @@ -1,5 +1,5 @@