diff --git a/test/e2e/components/Application.test.tsx b/test/e2e/components/Application.test.tsx
index 672e3442..74345a8e 100644
--- a/test/e2e/components/Application.test.tsx
+++ b/test/e2e/components/Application.test.tsx
@@ -3,31 +3,83 @@ import {
expect,
it,
vi,
-} from 'vitest';
+} from 'vitest'
+import { type Application as PixiApplication } from 'pixi.js'
import { render } from '@testing-library/react'
+import { useEffect } from 'react'
import { Application } from '../../../src/components/Application'
-import { wait } from '../../utils/wait';
+import { useApplication } from '../../../src/hooks/useApplication'
-describe('Application', () =>
-{
- describe('onInit', () => {
- it('runs the callback', async () => {
- const onInitSpy = vi.fn()
+describe('Application', () => {
+ it('runs the `onInit` callback', async () => {
+ const onInitSpy = vi.fn()
- const TestComponent = function() {
- return (
-
- )
- }
+ const TestComponent = () => (
+
+ )
- render((
-
- ))
+ render()
- await wait(1000)
+ await expect.poll(() => onInitSpy.mock.calls.length).toEqual(1)
+ });
- expect(onInitSpy.mock.calls.length).to.equal(1)
- });
+ it('unmounts after init', async () => {
+ let testApp: PixiApplication | null = null
+
+ const TestChildComponent = () => {
+ const { app } = useApplication()
+
+ useEffect(() => {
+ testApp = app
+
+ return () => {
+ testApp = app
+ }
+ }, [app])
+
+ return null
+ }
+
+ const TestComponent = () => (
+
+
+
+ )
+
+ const { unmount } = render()
+
+ await expect.poll(() => Boolean(testApp?.renderer)).toBeTruthy()
+
+ unmount()
+
+ await expect.poll(() => !testApp?.renderer).toBeFalsy()
+ await expect.poll(() => !testApp?.stage).toBeFalsy()
})
-});
+
+ it('unmounts during init', async () => {
+ let testApp: PixiApplication | null = null
+
+ const TestChildComponent = () => {
+ testApp = useApplication().app
+
+ return null
+ }
+
+ const TestComponent = () => (
+
+
+
+ )
+
+ const { unmount } = render()
+
+ await expect.poll(() => !testApp?.renderer).toBeFalsy()
+ await expect.poll(() => !testApp?.stage).toBeFalsy()
+
+ unmount()
+
+ await expect.poll(() => !testApp?.renderer).toBeFalsy()
+ await expect.poll(() => !testApp?.stage).toBeFalsy()
+ });
+})
diff --git a/vitest.setup.ts b/vitest.setup.ts
index b06f1468..f097bb90 100644
--- a/vitest.setup.ts
+++ b/vitest.setup.ts
@@ -1,8 +1,10 @@
import { afterEach } from 'vitest';
import '@testing-library/jest-dom/vitest';
-import { cleanup } from '@testing-library/react';
+import {
+ cleanup,
+ configure,
+} from '@testing-library/react';
-afterEach(() =>
-{
- cleanup();
-});
+configure({ reactStrictMode: true });
+
+afterEach(() => cleanup());
diff --git a/vitest.workspace.ts b/vitest.workspace.ts
index 07b989c6..a8ca1632 100644
--- a/vitest.workspace.ts
+++ b/vitest.workspace.ts
@@ -20,9 +20,7 @@ export default defineWorkspace([
},
globals: true,
include: ['test/e2e/**/*.test.ts(x)'],
- setupFiles: [
- './vitest.setup.ts'
- ],
+ setupFiles: ['./vitest.setup.ts'],
},
},
]);