From b322c02fdb55bb85b83b3be79fca5ef15d24ae95 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sun, 5 Apr 2026 15:22:40 +0300 Subject: [PATCH] =?UTF-8?q?fix(web-test):=20discoverTests=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=B4=D0=B8=D0=BD=D0=BE=D1=87=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0=20+=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D1=8B=D0=B9=20smoke-=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix: discoverTests падал с ENOTDIR при передаче .test.mjs файла - Добавлен 01-navigation.test.mjs — навигация по разделам, открытие списков через navigateLink, переключение между подсистемами Co-Authored-By: Claude Opus 4.6 (1M context) --- .claude/skills/web-test/scripts/run.mjs | 4 +-- tests/web-test/01-navigation.test.mjs | 42 +++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tests/web-test/01-navigation.test.mjs diff --git a/.claude/skills/web-test/scripts/run.mjs b/.claude/skills/web-test/scripts/run.mjs index 6611dc54..3659ac83 100644 --- a/.claude/skills/web-test/scripts/run.mjs +++ b/.claude/skills/web-test/scripts/run.mjs @@ -361,8 +361,8 @@ async function cmdTest(rawArgs) { } // Load config if exists - const testDir = existsSync(testPath) && readdirSync(testPath, { withFileTypes: true }).length >= 0 - ? testPath : dirname(testPath); + const isFile = testPath.endsWith('.test.mjs'); + const testDir = isFile ? dirname(testPath) : testPath; const configPath = resolve(testDir, 'webtest.config.mjs'); let config = {}; if (existsSync(configPath)) { diff --git a/tests/web-test/01-navigation.test.mjs b/tests/web-test/01-navigation.test.mjs new file mode 100644 index 00000000..3d1667c6 --- /dev/null +++ b/tests/web-test/01-navigation.test.mjs @@ -0,0 +1,42 @@ +export const name = 'Навигация по разделам'; +export const tags = ['nav', 'smoke']; +export const timeout = 60000; + +export default async function({ navigateSection, getPageState, openCommand, closeForm, assert, step, log }) { + + await step('Чтение начального состояния', async () => { + const state = await getPageState(); + const names = (state.sections || []).map(s => s.name); + log('Sections: ' + names.join(', ')); + assert.ok(names.length >= 2, 'Минимум 2 раздела'); + assert.includes(names, 'Склад', 'Раздел Склад должен быть'); + assert.includes(names, 'Администрирование', 'Раздел Администрирование должен быть'); + }); + + await step('Переход в раздел Склад', async () => { + const result = await navigateSection('Склад'); + log('Commands: ' + (result.commands || []).map(c => c.name).join(', ')); + assert.ok(result.commands?.length > 0, 'Должны быть команды в разделе Склад'); + }); + + await step('Открыть справочник Контрагенты', async () => { + const state = await openCommand('Контрагенты'); + assert.ok(state.form, 'Форма списка Контрагентов должна открыться'); + log('Opened: ' + state.title); + await closeForm(); + }); + + await step('Переход в раздел Администрирование', async () => { + const result = await navigateSection('Администрирование'); + log('Commands: ' + (result.commands || []).map(c => c.name).join(', ')); + assert.ok(result.commands?.length > 0, 'Должны быть команды в разделе Администрирование'); + }); + + await step('Открыть Номенклатуру из раздела Склад', async () => { + await navigateSection('Склад'); + const state = await openCommand('Номенклатура'); + assert.ok(state.form, 'Форма списка Номенклатуры должна открыться'); + log('Opened: ' + state.title); + await closeForm(); + }); +}