Обзор
Компоненты
- Accordion
- Alert
- Alert Dialog
- Autocomplete
- Auth Surface
- Avatar
- Badge
- Browse Catalog Dialog
- Button
- Card
- Checkbox
- Checkbox Group
- Collapsible
- Combobox
- Command
- Connector Setup Dialog
- Cookie Banner
- Dialog
- Directory Card
- Directory Detail
- Directory Skeleton
- DrawerНовое
- Token Parts Input
- Empty
- Field
- Fieldset
- File Preview Modal
- File Preview Skeleton
- Form
- Frame
- Group
- Icon
- Input
- Input Group
- Kbd
- Label
- Legal Shell
- Menu
- Mermaid Diagram
- Mind Map Diagram
- Not Found Screen
- Onboarding Frame
- Popover
- PDF Thumbnail
- Personalization Landing
- Preview Card
- Pricing Page
- Progress
- Radio Group
- Ring Spinner
- Scroll Area
- Select
- Separator
- Settings Page
- Settings Skills
- Settings Connectors
- Settings Capabilities
- Settings Usage
- Settings Account
- Settings Billing
- Sheet
- Sidebar
- Skeleton
- Skill Create Dialog
- Slider
- Spinner
- Stat
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Tooltip
AI-компоненты
- Компоненты AI
- Chat Conversation
- Chat Message
- Chat Response
- Chat Suggestion
- Chat Prompt Input
- Slash Highlighted Textarea
- Chat Search Dialog
- Chat Skill Doc
- Chat Connector Detail
- Chat Attachments
- Chat File Card
- Chat Token Chip
- Chat Code Block
- Chat Image
- Chat Inline Citation
- Chat Sources
- Chat Web Search
- Chat Research
- Chat Source
- Chat Actions
- Chat Context
- Chat Loader
- Chat Compaction
- Chat Timeline
- Chat Snippet
- Chat Terminal
- Chat Stack Trace
- Chat Test Results
- Chat File Tree
- Chat Environment Variables
- Chat Audio Player
- Chat Transcription
- Chat Speech Input
- Chat Mic Selector
- Chat Voice Selector
- Chat Agent
- Chat Persona
- Chat Connection
- Chat Connector Suggestion
- Chat Queue
- Chat Checkpoint
- Chat Confirmation
- Chat Artifact
- Chat JSX Preview
- Chat Schema Display
- Chat Package Info
- Chat Commit
- Chat Plan
- Chat Open In Chat
- Chat Sandbox
- Chat Model Selector
- Chat Canvas
- Chat Node
- Chat Edge
Ресурсы
Chat Test Results
Результаты тест-раннера со сводкой по пройденным и проваленным тестам, наборами и деталями по каждому тесту.
2 failedof 21 tests1.24s
x
вход с верными учётными данными42ms
отклоняет неверный пароль31ms
ограничивает после 5 попыток180ms
AssertionError: expected 429, got 200
at Object.<anonymous> (auth.test.ts:84:14)
at expect (node_modules/vitest/dist/index.js:32:11)регистрация нового пользователя
отображает сообщение пользователя с выравниванием по правому краю28ms
стримит ответ без мерцания520ms
TypeError: streamdown is not a function
at ChatResponse (registry/default/ui/chat-response.tsx:9:5)import {
ChatTest,
ChatTestError,
ChatTestResults,
ChatTestResultsHeader,
ChatTestResultsProgress,
ChatTestResultsSummary,
ChatTestSuite,
} from "@/components/ui/chat-test-results";
export default function Particle() {
return (
<div className="w-full max-w-2xl p-4">
<ChatTestResults
summary={{
passed: 18,
failed: 2,
skipped: 1,
total: 21,
duration: 1240,
}}
>
<ChatTestResultsHeader>
<ChatTestResultsSummary />
</ChatTestResultsHeader>
<ChatTestResultsProgress />
<ChatTestSuite
duration={420}
name="auth.test.ts"
stats={{ passed: 6, failed: 1 }}
>
<ChatTest
duration={42}
name="вход с верными учётными данными"
status="passed"
/>
<ChatTest
duration={31}
name="отклоняет неверный пароль"
status="passed"
/>
<ChatTest
duration={180}
name="ограничивает после 5 попыток"
status="failed"
>
<ChatTestError>{`AssertionError: expected 429, got 200
at Object.<anonymous> (auth.test.ts:84:14)
at expect (node_modules/vitest/dist/index.js:32:11)`}</ChatTestError>
</ChatTest>
<ChatTest name="регистрация нового пользователя" status="skipped" />
</ChatTestSuite>
<ChatTestSuite
duration={820}
name="chat-message.test.ts"
stats={{ passed: 12, failed: 1 }}
>
<ChatTest
duration={28}
name="отображает сообщение пользователя с выравниванием по правому краю"
status="passed"
/>
<ChatTest
duration={520}
name="стримит ответ без мерцания"
status="failed"
>
<ChatTestError>{`TypeError: streamdown is not a function
at ChatResponse (registry/default/ui/chat-response.tsx:9:5)`}</ChatTestError>
</ChatTest>
</ChatTestSuite>
</ChatTestResults>
</div>
);
}
Установка
pnpm dlx shadcn@latest add @oracul/chat-test-results
Использование
import {
ChatTest,
ChatTestError,
ChatTestResults,
ChatTestResultsHeader,
ChatTestResultsProgress,
ChatTestResultsSummary,
ChatTestSuite,
} from "@/components/ui/chat-test-results";
<ChatTestResults
summary={{ passed: 18, failed: 2, skipped: 1, total: 21, duration: 1240 }}
>
<ChatTestResultsHeader>
<ChatTestResultsSummary />
</ChatTestResultsHeader>
<ChatTestResultsProgress />
<ChatTestSuite name="auth.test.ts" stats={{ passed: 8, failed: 1 }} duration={420}>
<ChatTest name="signs in with valid credentials" status="passed" duration={120} />
<ChatTest name="rejects expired token" status="failed">
<ChatTestError>{"expected 401, got 403"}</ChatTestError>
</ChatTest>
<ChatTest name="rate-limits after 5 attempts" status="skipped" />
</ChatTestSuite>
</ChatTestResults>Карта компонентов
| Компонент | Назначение |
|---|---|
ChatTestResults | Корень. Принимает summary: { passed, failed, skipped, total, duration? }. |
ChatTestResultsSummary | Автоматически формируемая строка «X провалено из N тестов · длительность». |
ChatTestResultsProgress | Линейный прогресс по (passed + failed + skipped) / total. |
ChatTestSuite | Сворачиваемая группа (файл или describe). Раскрывается автоматически, если есть failed > 0. |
ChatTest | Отдельный тест. status: 'passed' | 'failed' | 'skipped' | 'running' | 'pending'. |
ChatTestError | <pre> с трейсом ошибки внутри <ChatTest status="failed">. |
На этой странице