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,
};
}