view --main test-skill-skill-dlya-avtomaticheskoy-generatsii-testov.md
test-skill: Скилл для автоматической генерации тестов
readonly
--- lines
---
name: test-skill
description: Когда пользователю необходимо написать модульный тест, этот навык запускается для создания модульного теста.
---
## Когда использовать этот навык
Когда пользователю необходимо написать модульный тест, этот навык запускается для создания модульного теста.
## Расположение тестовых файлов
### Тесты для пакетов (packages)
Тесты для пакетов располагаются в каталоге `FastGPT/test/cases`, где подкаталоги соответствуют структуре каталогов пакетов. Например:
Файл `packages/global/common/error/s3.ts` имеет соответствующий путь тестового файла `test/cases/global/common/error/s3.test.ts`.
Кроме того, можно импортировать файлы из пакетов, используя `@fastgpt`.
Например:
```typescript
import { s3 } from '@fastgpt/global/common/error/s3';
```
### Тесты для проектов (projects)
Тесты для проектов располагаются в каталоге `FastGPT/projects/app/test`, где подкаталоги соответствуют структуре каталогов проектов.
Файл `projects/app/src/pages/api/core/dataset/collection/create.ts` имеет соответствующий путь тестового файла `projects/app/test/api/core/dataset/collection/create.test.ts`.
## Правила для тестовых файлов
### Общие правила
1. Каждый файл соответствует одному тестовому файлу. Каждый функция соответствует отдельному блоку `describe`.
2. Необходимо обеспечить покрытие 100% строк и ветвлений.
3. Тестовые файлы должны по возможности избегать использования сторонних библиотек, используя более "родные" способы проверки. Если необходимо использовать сторонние библиотеки, их следует экспортировать из соответствующего файла для использования в тестах. Например:
```ts
// FastGPT/packages/service/common/geo/index.ts
import type { NextApiRequest } from 'next';
// Одновременно экспортируется зависимость для использования в FastGPT/test/cases/service/common/geo/index.test.ts
export type { NextApiRequest } from 'next';
```
4. Старайтесь минимизировать использование моков функций. Если функция может быть выполнена локально, ее не нужно мокать, а нужно мокать только те зависимости, которые не могут быть запущены локально (например, требующие удаленных сервисов, API-ключей и т.д.).
5. Файлы `type.ts`, `constants.ts`, `schema.ts`, `*.schema.ts` и статические данные следует игнорировать.
6. В соответствии с конфигурацией файла `[vitest.config.mts](../../../vitest.config.mts)`, следует пропускать файлы, которые не требуют тестирования.
7. Файл `[Mock.ts](../../../test/mocks/index.ts)` содержит глобальные моки, поэтому при написании тестов не следует повторять моки. В теории, в тестах можно мокать различные компоненты инфраструктуры.
### Тестирование базовых функций
Старайтесь не использовать моки, а полностью запускать их логику для тестирования.
### Функции с API-запросами
Мокируйте соответствующие API-запросы для тестирования.
## Процесс написания
**I. Подготовка к задаче**
1. Получите файл, для которого необходимо написать тест.
2. Создайте список задач, чтобы последовательно выполнять написание тестов для каждого файла.
**II. Написание тестов**
Тесты для разных файлов можно писать параллельно.
1. Проверьте, существует ли соответствующий тестовый файл `.test.ts`, и создайте его, если он отсутствует.
2. Проанализируйте код и напишите тестовые примеры.
3. Проверьте наличие ошибок TypeScript и убедитесь, что нет ошибок компиляции.
4. Завершите написание всех тестовых файлов.
**III. Проверка результатов**
1. Вызовите команду `pnpm test <file-path> <test-name>`, чтобы запустить тесты и проверить покрытие, убедившись, что покрытие для каждого файла составляет не менее 90%.
2. Если тесты не пройдены, проверьте код или тестовые примеры на основе сообщений об ошибках.
3. Если требуется внести изменения, вернитесь к разделу "II. Написание тестов".
## Какие сценарии охватывают модульные тесты
1. Базовые сценарии
2. Сложные сценарии
3. Граничные значения
4. Сценарии безопасности (бесконечные циклы, сбои системы, большие объемы данных и т.д.)
5. Исключительные сценарии
## Распространенные команды
```shell
# Запуск всех тестов
pnpm test
# Запуск тестов для указанного файла (укажите полный путь к файлу)
pnpm test <file-path>
# Запуск указанного теста для указанного файла
pnpm test <file-path> <test-name>
```
Инициализация мануала...
//
$ ls -R related_skills/
package.json
$ install --global
skills.sh
npx skills add https://github.com/labring/FastGPT/tree/main/.claude/skills/system-test
$ download --local
man
[HINT] Скачивает всю директорию скилла с GitHub: SKILL.md и все связанные файлы