test(web): проверка саундборда дожидается локального воспроизведения
Клиент играет звук асинхронно: сначала скачивает файл через /files/{id} в
blob, и только потом создаёт Audio и зовёт play(). Подпись о проигрывании
появляется раньше звука, а проверка читала счётчики сразу после неё и ловила
гонку: в прогоне build/e2e-all-run8.log пункт 27 падал с __soundCalls = 0,
хотя сервер отвечал 200 и запрос файла уже шёл. Ждём факт запуска через
expect.poll — проверка снова проверяет воспроизведение, а не скорость сети.
Пункт был недоступен раньше: без медиапути LiveKit тест скипался, поэтому
гонка не проявлялась.
This commit is contained in:
@@ -270,14 +270,27 @@ test.describe('UI шапки сервера, комнаты и саундбор
|
|||||||
await expect(page.getByTestId('soundboard-notice')).toContainText('zvonok', {
|
await expect(page.getByTestId('soundboard-notice')).toContainText('zvonok', {
|
||||||
timeout: 20_000,
|
timeout: 20_000,
|
||||||
});
|
});
|
||||||
const counters = await page.evaluate(
|
// Локальное воспроизведение асинхронно: клиент сначала скачивает файл
|
||||||
() => window as unknown as { __soundCalls?: number; __soundPlayed?: number },
|
// (`/files/{id}` → blob), и только потом создаёт `Audio` и зовёт `play()`.
|
||||||
);
|
// Подпись появляется раньше звука, поэтому счётчики не читаем сразу —
|
||||||
expect(
|
// дожидаемся факта запуска (иначе проверка ловит гонку, а не дефект).
|
||||||
counters.__soundCalls ?? 0,
|
const counter = (name: '__soundCalls' | '__soundPlayed'): Promise<number> =>
|
||||||
'клиент запустил локальное воспроизведение',
|
page.evaluate(
|
||||||
).toBeGreaterThan(0);
|
(key) => (window as unknown as Record<string, number | undefined>)[key] ?? 0,
|
||||||
expect(counters.__soundPlayed ?? 0, 'звук действительно заиграл локально').toBeGreaterThan(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 {
|
} finally {
|
||||||
await session?.context.close();
|
await session?.context.close();
|
||||||
await cleanupGuild(ownerApi, fixture, OWNER_LOGIN.password);
|
await cleanupGuild(ownerApi, fixture, OWNER_LOGIN.password);
|
||||||
|
|||||||
Reference in New Issue
Block a user