Add test for runtime host recreation logic

This commit is contained in:
2026-04-11 04:56:34 +02:00
parent d666295bc9
commit c892aa0f6c

View File

@@ -275,4 +275,54 @@ describe("RunnerCanvas", () => {
);
expect(document.querySelector(".runner-canvas__crosshair")).toBeNull();
});
it("does not recreate the runtime host when the scene-exit callback identity changes", async () => {
const runtimeScene = buildRuntimeSceneFromDocument(
createEmptySceneDocument()
);
const { rerender } = render(
<RunnerCanvas
runtimeScene={runtimeScene}
sceneName="Stable Runner"
sceneLoadingScreen={createDefaultSceneLoadingScreenSettings()}
projectAssets={{}}
loadedModelAssets={{}}
loadedImageAssets={{}}
loadedAudioAssets={{}}
navigationMode="firstPerson"
onRuntimeMessageChange={vi.fn()}
onFirstPersonTelemetryChange={vi.fn()}
onInteractionPromptChange={vi.fn()}
onSceneExitActivated={vi.fn()}
/>
);
await waitFor(() => {
expect(runtimeHostInstances).toHaveLength(1);
expect(runtimeHostInstances[0]?.loadScene).toHaveBeenCalledTimes(1);
});
rerender(
<RunnerCanvas
runtimeScene={runtimeScene}
sceneName="Stable Runner"
sceneLoadingScreen={createDefaultSceneLoadingScreenSettings()}
projectAssets={{}}
loadedModelAssets={{}}
loadedImageAssets={{}}
loadedAudioAssets={{}}
navigationMode="firstPerson"
onRuntimeMessageChange={vi.fn()}
onFirstPersonTelemetryChange={vi.fn()}
onInteractionPromptChange={vi.fn()}
onSceneExitActivated={vi.fn()}
/>
);
expect(runtimeHostInstances).toHaveLength(1);
expect(runtimeHostInstances[0]?.loadScene).toHaveBeenCalledTimes(1);
expect(
runtimeHostInstances[0]?.setSceneExitHandler
).toHaveBeenCalledTimes(2);
});
});