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', {
|
||||
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<number> =>
|
||||
page.evaluate(
|
||||
(key) => (window as unknown as Record<string, number | undefined>)[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);
|
||||
|
||||
Reference in New Issue
Block a user