60 lines
2.3 KiB
Markdown
60 lines
2.3 KiB
Markdown
# Vitest + Clean Architecture Refactoring
|
||
|
||
## Цель
|
||
|
||
Установить Vitest, переделать архитектуру ближе к чистой (порты/адаптеры),
|
||
написать нехрупкие тесты на реальные юзкейсы.
|
||
|
||
## Изменения
|
||
|
||
### Новые файлы
|
||
|
||
```txt
|
||
src/
|
||
├── ports.ts # Интерфейсы: IFileSystem, ITaskRepository, IConfigProvider
|
||
├── storage/
|
||
│ ├── FsTaskRepository.ts # ITaskRepository → зависит только от IFileSystem, markdown, uuid
|
||
│ ├── FsTaskRepository.test.ts # unit (sociable) — colocation с модулем
|
||
│ ├── VscodeConfigProvider.ts # IConfigProvider → зависит от vscode
|
||
│ └── NodeFileSystem.ts # IFileSystem → обёртка над fs.promises
|
||
├── utils/
|
||
│ └── markdown.test.ts # unit — colocation
|
||
|
||
tests/
|
||
└── helpers/
|
||
└── InMemoryFileSystem.ts # shared fakes; integration/e2e — сюда же позже
|
||
```
|
||
|
||
### Удалить
|
||
|
||
- `src/storage/taskStore.ts`
|
||
- `src/storage/configStore.ts`
|
||
|
||
### Изменить
|
||
|
||
- `src/views/taskTreeProvider.ts` — конструктор принимает `ITaskRepository` +
|
||
`IConfigProvider`
|
||
- `src/extension.ts` — сборка зависимостей (DI)
|
||
|
||
### Инфраструктура
|
||
|
||
- `npm i -D vitest`
|
||
- `vitest.config.ts`
|
||
- `package.json` — скрипты `test`, `test:run`
|
||
|
||
## Тесты
|
||
|
||
| Тест | Где | I/O | Что проверяет |
|
||
| ---------------- | ----------------------- | ------------------------ | -------------------------------------------- |
|
||
| FsTaskRepository | `src/storage/*.test.ts` | InMemoryFileSystem (Map) | CRUD, фильтрация по extension, контент файла |
|
||
| markdown | `src/utils/*.test.ts` | — | parse, serialize, round-trip, default-ы |
|
||
|
||
Unit/sociable unit — рядом с модулем (`src/**/*.test.ts`).
|
||
Shared fakes и будущие integration/e2e — в `tests/`.
|
||
|
||
## Что НЕ тестируем (пока)
|
||
|
||
- NodeFileSystem — тривиальная обёртка
|
||
- VscodeConfigProvider — требует Extension Host
|
||
- TaskTreeProvider — UI, требует Extension Host
|