import { afterEach, describe, expect, it, vi } from "vite-plus/test"; import { playSnapShotSound } from "./snapShotSound"; afterEach(() => { Reflect.deleteProperty(globalThis, "Audio"); vi.restoreAllMocks();}); describe("playSnapShotSound", () => { it.each([ ["soft-pop", /snap-shot-whoosh\.mp3/], ["camera-shutter", /snap-shot-click\.mp3/], ] as const)("plays the %s sound from its first sample", (selection, expectedUrl) => { const sound = { currentTime: 3, play: vi.fn().mockResolvedValue(undefined), preload: "none", }; const AudioMock = vi.fn(function AudioMock() { return sound; }); Object.defineProperty(globalThis, "Audio", { configurable: true, value: AudioMock, }); playSnapShotSound(selection); expect(AudioMock).toHaveBeenCalledWith(expect.stringMatching(expectedUrl)); expect(sound.preload).toBe("auto"); expect(sound.currentTime).toBe(0); expect(sound.play).toHaveBeenCalledOnce(); }); it("ignores blocked playback", async () => { const sound = { currentTime: 0, play: vi.fn().mockRejectedValue(new Error("blocked")), preload: "none", }; Object.defineProperty(globalThis, "Audio", { configurable: true, value: vi.fn(function AudioMock() { return sound; }), }); expect(() => playSnapShotSound("soft-pop")).not.toThrow(); await vi.waitFor(() => expect(sound.play).toHaveBeenCalledOnce()); });});
import { afterEach, describe, expect, it, vi } from "vite-plus/test";
import { playSnapShotSound } from "./snapShotSound";
afterEach(() => {
Reflect.deleteProperty(globalThis, "Audio");
vi.restoreAllMocks();
});
describe("playSnapShotSound", () => {
it.each([
["soft-pop", /snap-shot-whoosh\.mp3/],
["camera-shutter", /snap-shot-click\.mp3/],
] as const)("plays the %s sound from its first sample", (selection, expectedUrl) => {
const sound = {
currentTime: 3,
play: vi.fn().mockResolvedValue(undefined),
preload: "none",
};
const AudioMock = vi.fn(function AudioMock() {
return sound;
});
Object.defineProperty(globalThis, "Audio", {
configurable: true,
value: AudioMock,
});
playSnapShotSound(selection);
expect(AudioMock).toHaveBeenCalledWith(expect.stringMatching(expectedUrl));
expect(sound.preload).toBe("auto");
expect(sound.currentTime).toBe(0);
expect(sound.play).toHaveBeenCalledOnce();
});
it("ignores blocked playback", async () => {
const sound = {
currentTime: 0,
play: vi.fn().mockRejectedValue(new Error("blocked")),
preload: "none",
};
Object.defineProperty(globalThis, "Audio", {
configurable: true,
value: vi.fn(function AudioMock() {
return sound;
}),
});
expect(() => playSnapShotSound("soft-pop")).not.toThrow();
await vi.waitFor(() => expect(sound.play).toHaveBeenCalledOnce());
});
});