From ad7b3d21bb4d655b661cefeb69d2dd12fbf97757 Mon Sep 17 00:00:00 2001 From: grendervill Date: Sat, 26 Sep 2026 14:42:47 +0300 Subject: [PATCH] =?UTF-8?q?test(web):=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=20=D1=81=D0=B0=D1=83=D0=BD=D0=B4=D0=B1=D0=BE?= =?UTF-8?q?=D1=80=D0=B4=D0=B0=20=D0=B4=D0=BE=D0=B6=D0=B8=D0=B4=D0=B0=D0=B5?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BB=D0=BE=D0=BA=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=B2=D0=BE=D1=81=D0=BF=D1=80=D0=BE=D0=B8?= =?UTF-8?q?=D0=B7=D0=B2=D0=B5=D0=B4=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Клиент играет звук асинхронно: сначала скачивает файл через /files/{id} в blob, и только потом создаёт Audio и зовёт play(). Подпись о проигрывании появляется раньше звука, а проверка читала счётчики сразу после неё и ловила гонку: в прогоне build/e2e-all-run8.log пункт 27 падал с __soundCalls = 0, хотя сервер отвечал 200 и запрос файла уже шёл. Ждём факт запуска через expect.poll — проверка снова проверяет воспроизведение, а не скорость сети. Пункт был недоступен раньше: без медиапути LiveKit тест скипался, поэтому гонка не проявлялась. --- web/e2e/guild-ui.spec.ts | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/web/e2e/guild-ui.spec.ts b/web/e2e/guild-ui.spec.ts index bd50e37..9880abb 100644 --- a/web/e2e/guild-ui.spec.ts +++ b/web/e2e/guild-ui.spec.ts @@ -270,14 +270,27 @@ test.describe('UI шапки сервера, комнаты и саундбор await expect(page.getByTestId('soundboard-notice')).toContainText('zvonok', { timeout: 20_000, }); - const counters = await page.evaluate( - () => window as unknown as { __soundCalls?: number; __soundPlayed?: number }, - ); - expect( - counters.__soundCalls ?? 0, - 'клиент запустил локальное воспроизведение', - ).toBeGreaterThan(0); - expect(counters.__soundPlayed ?? 0, 'звук действительно заиграл локально').toBeGreaterThan(0); + // Локальное воспроизведение асинхронно: клиент сначала скачивает файл + // (`/files/{id}` → blob), и только потом создаёт `Audio` и зовёт `play()`. + // Подпись появляется раньше звука, поэтому счётчики не читаем сразу — + // дожидаемся факта запуска (иначе проверка ловит гонку, а не дефект). + const counter = (name: '__soundCalls' | '__soundPlayed'): Promise => + page.evaluate( + (key) => (window as unknown as Record)[key] ?? 0, + name, + ); + await expect + .poll(() => counter('__soundCalls'), { + message: 'клиент запустил локальное воспроизведение', + timeout: 20_000, + }) + .toBeGreaterThan(0); + await expect + .poll(() => counter('__soundPlayed'), { + message: 'звук действительно заиграл локально', + timeout: 20_000, + }) + .toBeGreaterThan(0); } finally { await session?.context.close(); await cleanupGuild(ownerApi, fixture, OWNER_LOGIN.password);