diff --git a/src/livekit/MatrixAudioRenderer.test.tsx b/src/livekit/MatrixAudioRenderer.test.tsx index 637e02ed..502c8c65 100644 --- a/src/livekit/MatrixAudioRenderer.test.tsx +++ b/src/livekit/MatrixAudioRenderer.test.tsx @@ -16,15 +16,18 @@ import { type RemoteAudioTrack } from "livekit-client"; import { type ReactNode } from "react"; import { useTracks } from "@livekit/components-react"; -import { testAudioContext } from "../useAudioContext.test"; +import { + TestAudioConstructor, + testAudioContext, + TestAudioContextConstructor, +} from "../useAudioContext.test"; import * as MediaDevicesContext from "./MediaDevicesContext"; import { MatrixAudioRenderer } from "./MatrixAudioRenderer"; import { mockTrack } from "../utils/test"; -export const TestAudioContextConstructor = vi.fn(() => testAudioContext); - beforeEach(() => { vi.stubGlobal("AudioContext", TestAudioContextConstructor); + vi.stubGlobal("Audio", TestAudioConstructor); }); afterEach(() => { diff --git a/src/useAudioContext.test.tsx b/src/useAudioContext.test.tsx index 5a1ce447..3fdea8a5 100644 --- a/src/useAudioContext.test.tsx +++ b/src/useAudioContext.test.tsx @@ -87,13 +87,19 @@ export const testAudioContext = { createGain: vi.fn().mockReturnValue(gainNode), createStereoPanner: vi.fn().mockReturnValue(panNode), close: vi.fn().mockResolvedValue(undefined), - createMediaStreamDestination: vi.fn(), + createMediaStreamDestination: vi.fn().mockReturnValue({ stream: undefined }), }; export const TestAudioContextConstructor = vi.fn(() => testAudioContext); +export const testAudioElement = { + setSinkId: vi.fn().mockResolvedValue(null), +}; +export const TestAudioConstructor = vi.fn(() => testAudioElement); let user: UserEvent; beforeEach(() => { vi.stubGlobal("AudioContext", TestAudioContextConstructor); + vi.stubGlobal("Audio", TestAudioConstructor); + user = userEvent.setup(); }); @@ -115,6 +121,7 @@ test("will ignore sounds that are not registered", async () => { }); test("will use the correct device", () => { + testAudioElement.setSinkId.mockClear(); render( { , ); expect(testAudioContext.createBufferSource).not.toHaveBeenCalled(); - expect(testAudioContext.setSinkId).toHaveBeenCalledWith("chosen-device"); + expect(testAudioElement.setSinkId).toHaveBeenCalledWith("chosen-device"); }); test("will use the correct volume level", async () => { diff --git a/src/useAudioContext.tsx b/src/useAudioContext.tsx index 3c11ce11..be882103 100644 --- a/src/useAudioContext.tsx +++ b/src/useAudioContext.tsx @@ -59,6 +59,7 @@ interface Props { interface UseAudioContext { playSound(soundName: S): Promise; + htmlAudioElement: HTMLAudioElement; } /** @@ -140,5 +141,6 @@ export function useAudioContext( earpiecePan, ); }, + htmlAudioElement, }; }