UTC: 2026-10-14T07:20:59.789143+00:00 COMMAND: npm test -- tests/audio.test.ts tests/game.test.ts tests/audio-requests.test.ts > find-word@0.1.1 test > vitest run tests/audio.test.ts tests/game.test.ts tests/audio-requests.test.ts RUN v5.0.4 /home/hermes/worktrees/find-word-v0.1.1 ❯ tests/audio-requests.test.ts (1 test | 1 failed) 28ms × WAV 요청 판정은 query의 버전·순서와 무관하게 pathname을 사용한다 26ms ❯ tests/game.test.ts (8 tests | 1 failed) 92ms ❯ 출제와 정답 판정 (5) × 목표 WAV 100개 모두 같은 명시적 cache-busting 버전과 정답 mapping을 유지한다 50ms ❯ tests/audio.test.ts (8 tests | 3 failed) 357ms ❯ 오디오 재생 수명과 믹서 (8) × intro와 목표 실제 fetch URL에 같은 명시적 cache-busting 버전을 붙인다 101ms × intro 404 후 intro·목표를 동일한 versioned URL로 다시 요청한다 47ms × target 404 후 intro·목표를 동일한 versioned URL로 다시 요청한다 47ms ⎯⎯⎯⎯⎯⎯⎯ Failed Tests 5 ⎯⎯⎯⎯⎯⎯⎯ FAIL tests/audio-requests.test.ts > WAV 요청 판정은 query의 버전·순서와 무관하게 pathname을 사용한다 AssertionError: /audio/intro.wav?v=0.1.1: expected false to be true // Object.is equality - Expected + Received - true + false ❯ tests/audio-requests.test.ts:12:74 10| "/audio/luck-apple.wav", 11| ]) { 12| expect.soft(isAudioRequest(new URL(path, "http://localhost")), pat… | ^ 13| } 14| for (const path of [ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/11]⎯ FAIL tests/audio-requests.test.ts > WAV 요청 판정은 query의 버전·순서와 무관하게 pathname을 사용한다 AssertionError: /audio/luck-apple.wav?v=0.1.1: expected false to be true // Object.is equality - Expected + Received - true + false ❯ tests/audio-requests.test.ts:12:74 10| "/audio/luck-apple.wav", 11| ]) { 12| expect.soft(isAudioRequest(new URL(path, "http://localhost")), pat… | ^ 13| } 14| for (const path of [ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/11]⎯ FAIL tests/audio-requests.test.ts > WAV 요청 판정은 query의 버전·순서와 무관하게 pathname을 사용한다 AssertionError: /audio/luck-apple.wav?retry=1&v=0.1.1: expected false to be true // Object.is equality - Expected + Received - true + false ❯ tests/audio-requests.test.ts:12:74 10| "/audio/luck-apple.wav", 11| ]) { 12| expect.soft(isAudioRequest(new URL(path, "http://localhost")), pat… | ^ 13| } 14| for (const path of [ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/11]⎯ FAIL tests/audio-requests.test.ts > WAV 요청 판정은 query의 버전·순서와 무관하게 pathname을 사용한다 AssertionError: /audio/luck-apple.wav?v=0.1.1&retry=1: expected false to be true // Object.is equality - Expected + Received - true + false ❯ tests/audio-requests.test.ts:12:74 10| "/audio/luck-apple.wav", 11| ]) { 12| expect.soft(isAudioRequest(new URL(path, "http://localhost")), pat… | ^ 13| } 14| for (const path of [ ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/11]⎯ FAIL tests/audio-requests.test.ts > WAV 요청 판정은 query의 버전·순서와 무관하게 pathname을 사용한다 AssertionError: /audio/manifest.json?file=intro.wav: expected true to be false // Object.is equality - Expected + Received - false + true ❯ tests/audio-requests.test.ts:20:74 18| "/audio/intro.wav.txt?v=0.1.1", 19| ]) { 20| expect.soft(isAudioRequest(new URL(path, "http://localhost")), pat… | ^ 21| } 22| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/11]⎯ FAIL tests/audio-requests.test.ts > WAV 요청 판정은 query의 버전·순서와 무관하게 pathname을 사용한다 AssertionError: /other/intro.wav: expected true to be false // Object.is equality - Expected + Received - false + true ❯ tests/audio-requests.test.ts:20:74 18| "/audio/intro.wav.txt?v=0.1.1", 19| ]) { 20| expect.soft(isAudioRequest(new URL(path, "http://localhost")), pat… | ^ 21| } 22| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/11]⎯ FAIL tests/audio-requests.test.ts > WAV 요청 판정은 query의 버전·순서와 무관하게 pathname을 사용한다 AssertionError: /audio-backup/intro.wav: expected true to be false // Object.is equality - Expected + Received - false + true ❯ tests/audio-requests.test.ts:20:74 18| "/audio/intro.wav.txt?v=0.1.1", 19| ]) { 20| expect.soft(isAudioRequest(new URL(path, "http://localhost")), pat… | ^ 21| } 22| }); ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/11]⎯ FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > intro와 목표 실제 fetch URL에 같은 명시적 cache-busting 버전을 붙인다 AssertionError: expected [ '/audio/intro.wav', …(1) ] to deeply equal [ '/audio/intro.wav?v=0.1.1', …(1) ] - Expected + Received [ - "/audio/intro.wav?v=0.1.1", - "/audio/correction-market.wav?v=0.1.1", + "/audio/intro.wav", + "/audio/correction-market.wav", ] ❯ tests/audio.test.ts:97:54 95| f.sources.at(-1)!.onended?.(); 96| await done; 97| expect(f.fetcher.mock.calls.map(([url]) => url)).toEqual([ | ^ 98| "/audio/intro.wav?v=0.1.1", 99| `/audio/${question.id}.wav?v=0.1.1`, ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/11]⎯ FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > intro 404 후 intro·목표를 동일한 versioned URL로 다시 요청한다 FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > target 404 후 intro·목표를 동일한 versioned URL로 다시 요청한다 AssertionError: expected [ '/audio/intro.wav', …(3) ] to deeply equal [ '/audio/intro.wav?v=0.1.1', …(3) ] - Expected + Received [ - "/audio/intro.wav?v=0.1.1", - "/audio/correction-market.wav?v=0.1.1", - "/audio/intro.wav?v=0.1.1", - "/audio/correction-market.wav?v=0.1.1", + "/audio/intro.wav", + "/audio/correction-market.wav", + "/audio/intro.wav", + "/audio/correction-market.wav", ] ❯ tests/audio.test.ts:119:54 117| f.sources.at(-1)!.onended?.(); 118| await done; 119| expect(f.fetcher.mock.calls.map(([url]) => url)).toEqual([ | ^ 120| "/audio/intro.wav?v=0.1.1", 121| `/audio/${question.id}.wav?v=0.1.1`, ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/11]⎯ FAIL tests/game.test.ts > 출제와 정답 판정 > 목표 WAV 100개 모두 같은 명시적 cache-busting 버전과 정답 mapping을 유지한다 AssertionError: expected Set{ null } to deeply equal Set{ '0.1.1' } - Expected + Received Set { - "0.1.1", + null, } ❯ tests/game.test.ts:30:22 28| versions.add(url.searchParams.get("v")); 29| } 30| expect(versions).toEqual(new Set(["0.1.1"])); | ^ 31| }); 32| it("실제 보기에 있는 경쟁 단어를 문장에 넣고 청취 연산별 순서를 유지한다", () => { ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/11]⎯ Test Files 3 failed (3) Tests 5 failed | 12 passed (17) Start at 07:21:00 Duration 1.91s (environment 66%, setup 13%, tests 11%, transform 6%, worker 2%, import 2%) EXIT_CODE: 1