Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,18 @@ module.exports = {

## Использование

### Быстрый старт

Создайте файл конфигурации с настройками по умолчанию:

```bash
npx spec-collector init
```

Затем отредактируйте созданный файл `spec-collector.config.js` в соответствии с вашим проектом.

### Запуск

Для корректной работе инструмента нужно чтобы запуск playwright тестов в list режиме отрабатывал без ошибок. Проверить можно выполнив

```bash
Expand All @@ -86,6 +98,12 @@ npx spec-collector
npx spec-collector -u
```

### Команды CLI

- `npx spec-collector init` — создать файл конфигурации с настройками по умолчанию
- `npx spec-collector init --force` — пересоздать файл конфигурации (перезаписать существующий)
- `npx spec-collector --help` — показать справку

### Работа со сценариями

Пакет дает возможность хранить в кодовой базе сценарии еще не написанных тестов. Playwright не будет видеть эти тесты и они не будут видны в отчетах. Сценарии могут использоваться для понимание реального тестового покрытия относительно целевого.
Expand All @@ -109,6 +127,7 @@ test('Обычный тест', async ({page}) => {
## Структура проекта

- `src/cli.ts` - CLI интерфейс
- `src/initCommand.ts` - Команда инициализации конфига
- `src/index.ts` - Основной модуль
- `src/SpecCollector.ts` - Класс для сбора спецификаций
- `src/EmptyTestCollector.ts` - Класс для работы со сценариями
Expand Down
23 changes: 21 additions & 2 deletions src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {collectSuite} from './index';
import {CliOptions, Settings} from './typings';
import {cosmiconfig} from 'cosmiconfig';
import {createLogger} from './logger';
import {InitOptions, initCommand} from './initCommand';

const program = new Command();

Expand All @@ -14,14 +15,32 @@ program
.description('Collect spec-box suite from code of your test files')
.version(version);

program
.command('init')
.description('Create a spec-collector configuration file')
.option('-f, --force', 'Overwrite existing config file')
.action(async (options: InitOptions) => {
const logger = createLogger('info');
await initCommand(options, logger);
});

program
.option('-u, --upload', 'Upload files to spec-box server')
.option('--verbose', 'Enable verbose logging')
.action(async (cliOptions: Partial<CliOptions>) => {
const logger = createLogger(cliOptions.verbose ? 'debug' : 'info');
const explorer = cosmiconfig('spec-collector');
const config = ((await explorer.search())?.config ?? {}) as Settings;
const searchConfigResult = await explorer.search();

const logger = createLogger(cliOptions.verbose ? 'debug' : 'info');
if (!searchConfigResult) {
logger.error(
'Config file not found. Create config file https://github.com/spec-box/collector?tab=readme-ov-file#конфигурация',
);
logger.info('You can create a default config file by running: spec-collector init');
process.exit(1);
}

const config = (searchConfigResult?.config ?? {}) as Settings;

await collectSuite(config, cliOptions, logger);
});
Expand Down
56 changes: 56 additions & 0 deletions src/initCommand.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import {existsSync, writeFileSync} from 'node:fs';
import {join} from 'node:path';
import {Logger} from './logger';

export interface InitOptions {
force?: boolean;
}

export async function initCommand(options: InitOptions, logger: Logger): Promise<void> {
const configFileName = 'spec-collector.config.js';
const configPath = join(process.cwd(), configFileName);

if (existsSync(configPath) && !options.force) {
logger.error(
`Configuration file ${configFileName} already exists. Use --force to overwrite.`,
);
process.exit(1);
}

const defaultConfig = `module.exports = {
projects: [
{
configPath: './playwright.config.ts',
// emptyTestsYamlPath: './specBoxTests.yml', // необязательно
// rootPath: './', // необязательно
},
],
// Настройки форматирования заголовков (необязательно)
formatTitle: {
remove: [],
replace: [],
},
// Игнорируемые файлы (необязательно)
ignoreFiles: ['setup'],
// Количество уровней структуры (необязательно, по умолчанию 3)
levels: 3,
// Путь к выходному файлу (необязательно)
outputFile: './spec-collector-result.json',
// Настройки для загрузки в spec-box (необходимы только для опции --upload)
// host: 'https://your-spec-box-server.com',
// specBoxProject: 'your-project-name',
};
`;

try {
writeFileSync(configPath, defaultConfig, 'utf8');
logger.info(`Configuration file created: ${configFileName}`);
logger.info('Please edit the configuration file to match your project setup.');
logger.info(
'For more information, see: https://github.com/spec-box/collector#конфигурация',
);
} catch (error) {
logger.error(`Failed to create configuration file: ${(error as Error).message}`);
process.exit(1);
}
}