273 lines
13 KiB
Plaintext
273 lines
13 KiB
Plaintext
|
||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.3
|
||
|
||
❯ tests/audio.test.ts (11 tests | 9 failed) 139ms
|
||
❯ 오디오 재생 수명과 믹서 (8)
|
||
× intro와 목표 실제 fetch URL에 같은 명시적 cache-busting 버전을 붙인다 21ms
|
||
× intro 404 후 intro·목표를 동일한 versioned URL로 다시 요청한다 19ms
|
||
× target 404 후 intro·목표를 동일한 versioned URL로 다시 요청한다 20ms
|
||
× 생성 시 무음이며 gesture의 play에서만 장치를 연다 13ms
|
||
× 동시 시작을 거부하고 정지하면 모든 노드와 대기 Promise를 취소한다 14ms
|
||
× HTTP·디코드·장치 실패를 전달하고 다음 시도는 다시 로드한다 3ms
|
||
× 전체 음량은 두 신호의 비율을 보존하며 0부터 1 범위로 제한한다 9ms
|
||
× 선택한 녹음을 디코드·루프하고 목표 종료에서 모든 소스와 fetch를 정리한다 11ms
|
||
× 배경 404·디코드 실패는 한국어 복구 메시지이고 재시도로 성공한다 10ms
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 9 ⎯⎯⎯⎯⎯⎯⎯
|
||
|
||
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > intro와 목표 실제 fetch URL에 같은 명시적 cache-busting 버전을 붙인다
|
||
TypeError: Cannot read properties of undefined (reading 'onended')
|
||
❯ tests/audio.test.ts:95:21
|
||
93| const done = f.engine.play(question, true, vi.fn());
|
||
94| await flush();
|
||
95| f.sources.at(-1)!.onended?.();
|
||
| ^
|
||
96| await done;
|
||
97| expect(f.fetcher.mock.calls.map(([url]) => url)).toEqual([
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/9]⎯
|
||
|
||
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > intro 404 후 intro·목표를 동일한 versioned URL로 다시 요청한다
|
||
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > target 404 후 intro·목표를 동일한 versioned URL로 다시 요청한다
|
||
TypeError: Cannot read properties of undefined (reading 'onended')
|
||
❯ tests/audio.test.ts:129:23
|
||
127| const done = f.engine.play(question, true, vi.fn());
|
||
128| await flush();
|
||
129| f.sources.at(-1)!.onended?.();
|
||
| ^
|
||
130| await done;
|
||
131| expect(f.fetcher.mock.calls.map(([url]) => url)).toEqual([
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/9]⎯
|
||
|
||
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > 생성 시 무음이며 gesture의 play에서만 장치를 연다
|
||
AssertionError: expected "vi.fn()" to be called once, but got 0 times
|
||
❯ tests/audio.test.ts:150:21
|
||
148| expect(f.context.resume).toHaveBeenCalledOnce();
|
||
149| await flush();
|
||
150| expect(started).toHaveBeenCalledOnce();
|
||
| ^
|
||
151| expect(f.sources).toHaveLength(3);
|
||
152| expect(
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/9]⎯
|
||
|
||
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > 동시 시작을 거부하고 정지하면 모든 노드와 대기 Promise를 취소한다
|
||
AssertionError: expected TypeError: (0 , __vite_ssr_import_1__.syn… to match object { name: 'AbortError' }
|
||
|
||
- Expected
|
||
+ Received
|
||
|
||
- {
|
||
- "name": "AbortError",
|
||
+ TypeError {
|
||
+ "message": "(0 , __vite_ssr_import_1__.synthesizeBackground) is not a function",
|
||
}
|
||
|
||
❯ tests/audio.test.ts:182:35
|
||
180| const f = fixture();
|
||
181| const done = f.engine.play(question, false, vi.fn());
|
||
182| const cancelled = expect(done).rejects.toMatchObject({
|
||
| ^
|
||
183| name: "AbortError",
|
||
184| });
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/9]⎯
|
||
|
||
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > HTTP·디코드·장치 실패를 전달하고 다음 시도는 다시 로드한다
|
||
AssertionError: expected [Function] to throw error including '해석' but got 'decode'
|
||
|
||
Expected: "해석"
|
||
Received: "decode"
|
||
|
||
❯ tests/audio.test.ts:226:58
|
||
224| );
|
||
225| f.context.decodeAudioData.mockRejectedValueOnce(new Error("decode"…
|
||
226| await expect(f.engine.play(question, false, vi.fn())).rejects.toTh…
|
||
| ^
|
||
227| "해석",
|
||
228| );
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/9]⎯
|
||
|
||
FAIL tests/audio.test.ts > 오디오 재생 수명과 믹서 > 전체 음량은 두 신호의 비율을 보존하며 0부터 1 범위로 제한한다
|
||
TypeError: Cannot read properties of undefined (reading 'onended')
|
||
❯ tests/audio.test.ts:248:21
|
||
246| f.engine.setVolume(-1);
|
||
247| expect(f.gains[0]!.gain.setTargetAtTime).toHaveBeenCalledWith(0, 2…
|
||
248| f.sources.at(-1)!.onended?.();
|
||
| ^
|
||
249| await done;
|
||
250| });
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/9]⎯
|
||
|
||
FAIL tests/audio.test.ts > 선택한 녹음을 디코드·루프하고 목표 종료에서 모든 소스와 fetch를 정리한다
|
||
AssertionError: expected "vi.fn()" to be called with arguments: [ Array(2) ]
|
||
|
||
Received:
|
||
|
||
1st vi.fn() call:
|
||
|
||
[
|
||
- "/ambience/street.wav?v=0.1.1",
|
||
- ObjectContaining {
|
||
- "signal": Any<AbortSignal>,
|
||
+ "/audio/correction-market.wav?v=0.1.1",
|
||
+ {
|
||
+ "signal": AbortSignal {
|
||
+ Symbol(kEvents): undefined,
|
||
+ Symbol(events.maxEventTargetListeners): 0,
|
||
+ Symbol(events.maxEventTargetListenersWarned): false,
|
||
+ Symbol(kHandlers): undefined,
|
||
+ Symbol(kAborted): true,
|
||
+ Symbol(kReason): AbortError {
|
||
+ "message": "This operation was aborted",
|
||
+ },
|
||
+ Symbol(kComposite): false,
|
||
+ },
|
||
},
|
||
]
|
||
|
||
|
||
Number of calls: 1
|
||
|
||
❯ tests/audio.test.ts:258:21
|
||
256| const done = f.engine.play(question, false, vi.fn());
|
||
257| await flush();
|
||
258| expect(f.fetcher).toHaveBeenCalledWith(question.environment.audioUrl…
|
||
| ^
|
||
259| expect(f.context.decodeAudioData).toHaveBeenCalledTimes(2);
|
||
260| expect(f.sources[0]!.loop).toBe(true);
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/9]⎯
|
||
|
||
FAIL tests/audio.test.ts > 배경 404·디코드 실패는 한국어 복구 메시지이고 재시도로 성공한다
|
||
AssertionError: expected [Function] to throw error matching /배경.*다시/ but got '(0 , __vite_ssr_import_1__.synthesize…'
|
||
|
||
- Expected:
|
||
/배경.*다시/
|
||
|
||
+ Received:
|
||
"(0 , __vite_ssr_import_1__.synthesizeBackground) is not a function"
|
||
|
||
❯ tests/audio.test.ts:272:56
|
||
270| f.fetcher.mockImplementationOnce(async () => ({ ok: true, arrayBuffe…
|
||
271| f.fetcher.mockResolvedValueOnce({ ok: false } as Response);
|
||
272| await expect(f.engine.play(question, false, vi.fn())).rejects.toThro…
|
||
| ^
|
||
273| f.context.decodeAudioData.mockRejectedValueOnce(new Error("EncodingE…
|
||
274| await expect(f.engine.play(question, false, vi.fn())).rejects.toThro…
|
||
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/9]⎯
|
||
|
||
⎯⎯⎯⎯⎯⎯ Unhandled Errors ⎯⎯⎯⎯⎯⎯
|
||
|
||
Vitest caught 6 unhandled errors during the test run.
|
||
This might cause false positive tests. Resolve unhandled errors to make sure your tests are not affected.
|
||
|
||
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
|
||
TypeError: synthesizeBackground is not a function
|
||
❯ src/audio/engine.ts:131:15
|
||
129| background.copyToChannel(
|
||
130| normalizeRms(
|
||
131| synthesizeBackground(
|
||
| ^
|
||
132| question.environment,
|
||
133| context.sampleRate,
|
||
❯ process.processTicksAndRejections node:internal/process/task_queues:104:5
|
||
|
||
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
|
||
The last test to run before this error was "로드 시간초과는 fetch를 취소하고 늦은 디코드가 소스를 만들지 않는다". This means either:
|
||
- the error was thrown while Vitest was running this test, or
|
||
- the error was thrown after the test completed, and this was the most recent test at that point.
|
||
|
||
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
|
||
TypeError: synthesizeBackground is not a function
|
||
❯ src/audio/engine.ts:131:15
|
||
129| background.copyToChannel(
|
||
130| normalizeRms(
|
||
131| synthesizeBackground(
|
||
| ^
|
||
132| question.environment,
|
||
133| context.sampleRate,
|
||
❯ process.processTicksAndRejections node:internal/process/task_queues:104:5
|
||
|
||
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
|
||
The last test to run before this error was "로드 시간초과는 fetch를 취소하고 늦은 디코드가 소스를 만들지 않는다". This means either:
|
||
- the error was thrown while Vitest was running this test, or
|
||
- the error was thrown after the test completed, and this was the most recent test at that point.
|
||
|
||
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
|
||
TypeError: synthesizeBackground is not a function
|
||
❯ src/audio/engine.ts:131:15
|
||
129| background.copyToChannel(
|
||
130| normalizeRms(
|
||
131| synthesizeBackground(
|
||
| ^
|
||
132| question.environment,
|
||
133| context.sampleRate,
|
||
❯ process.processTicksAndRejections node:internal/process/task_queues:104:5
|
||
|
||
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
|
||
The last test to run before this error was "로드 시간초과는 fetch를 취소하고 늦은 디코드가 소스를 만들지 않는다". This means either:
|
||
- the error was thrown while Vitest was running this test, or
|
||
- the error was thrown after the test completed, and this was the most recent test at that point.
|
||
|
||
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
|
||
TypeError: synthesizeBackground is not a function
|
||
❯ src/audio/engine.ts:131:15
|
||
129| background.copyToChannel(
|
||
130| normalizeRms(
|
||
131| synthesizeBackground(
|
||
| ^
|
||
132| question.environment,
|
||
133| context.sampleRate,
|
||
❯ process.processTicksAndRejections node:internal/process/task_queues:104:5
|
||
|
||
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
|
||
The last test to run before this error was "로드 시간초과는 fetch를 취소하고 늦은 디코드가 소스를 만들지 않는다". This means either:
|
||
- the error was thrown while Vitest was running this test, or
|
||
- the error was thrown after the test completed, and this was the most recent test at that point.
|
||
|
||
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
|
||
TypeError: synthesizeBackground is not a function
|
||
❯ src/audio/engine.ts:131:15
|
||
129| background.copyToChannel(
|
||
130| normalizeRms(
|
||
131| synthesizeBackground(
|
||
| ^
|
||
132| question.environment,
|
||
133| context.sampleRate,
|
||
❯ process.processTicksAndRejections node:internal/process/task_queues:104:5
|
||
|
||
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
|
||
The last test to run before this error was "로드 시간초과는 fetch를 취소하고 늦은 디코드가 소스를 만들지 않는다". This means either:
|
||
- the error was thrown while Vitest was running this test, or
|
||
- the error was thrown after the test completed, and this was the most recent test at that point.
|
||
|
||
⎯⎯⎯⎯ Unhandled Rejection ⎯⎯⎯⎯⎯
|
||
TypeError: synthesizeBackground is not a function
|
||
❯ src/audio/engine.ts:131:15
|
||
129| background.copyToChannel(
|
||
130| normalizeRms(
|
||
131| synthesizeBackground(
|
||
| ^
|
||
132| question.environment,
|
||
133| context.sampleRate,
|
||
❯ process.processTicksAndRejections node:internal/process/task_queues:104:5
|
||
|
||
This error originated in "tests/audio.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
|
||
The last test to run before this error was "로드 시간초과는 fetch를 취소하고 늦은 디코드가 소스를 만들지 않는다". This means either:
|
||
- the error was thrown while Vitest was running this test, or
|
||
- the error was thrown after the test completed, and this was the most recent test at that point.
|
||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
|
||
|
||
|
||
Test Files 1 failed (1)
|
||
Tests 9 failed | 2 passed (11)
|
||
Errors 6 errors
|
||
Start at 08:00:38
|
||
Duration 979ms (environment 65%, tests 16%, setup 11%, transform 6%, import 1%, worker 1%)
|
||
|