mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-28 18:22:40 +00:00
## Summary Simplify default scripts. Filtering is still available to users, we can revisit tagging or grouping later. This fixes the issue where we had tests that were in the codebase but never run because they weren't under `/src/components` Also deletes the duplicate litegraph tests and their associated vitest config file. ## Changes - **What**: Test cleanup ## Review Focus ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-5888-Tests-Vitest-configuration-cleanup-2806d73d36508197b800f68f0b028279) by [Unito](https://www.unito.io)
4.8 KiB
4.8 KiB
Storybook Development Guidelines for Claude
Quick Commands
pnpm storybook: Start Storybook development serverpnpm build-storybook: Build static Storybookpnpm test:unit: Run unit tests (includes Storybook components)
Development Workflow for Storybook
-
Creating New Stories:
- Place
*.stories.tsfiles alongside components - Follow the naming pattern:
ComponentName.stories.ts - Use realistic mock data that matches ComfyUI schemas
- Place
-
Testing Stories:
- Verify stories render correctly in Storybook UI
- Test different component states and edge cases
- Ensure proper theming and styling
-
Code Quality:
- Run
pnpm typecheckto verify TypeScript - Run
pnpm lintto check for linting issues - Follow existing story patterns and conventions
- Run
Story Creation Guidelines
Basic Story Structure
import type { Meta, StoryObj } from '@storybook/vue3'
import ComponentName from './ComponentName.vue'
const meta: Meta<typeof ComponentName> = {
title: 'Category/ComponentName',
component: ComponentName,
parameters: {
layout: 'centered' // or 'fullscreen', 'padded'
}
}
export default meta
type Story = StoryObj<typeof meta>
export const Default: Story = {
args: {
// Component props
}
}
Mock Data Patterns
For ComfyUI components, use realistic mock data:
// Node definition mock
const mockNodeDef = {
input: {
required: {
prompt: ["STRING", { multiline: true }]
}
},
output: ["CONDITIONING"],
output_is_list: [false],
category: "conditioning"
}
// Component instance mock
const mockComponent = {
id: "1",
type: "CLIPTextEncode",
// ... other properties
}
Common Story Variants
Always include these story variants when applicable:
- Default: Basic component with minimal props
- WithData: Component with realistic data
- Loading: Component in loading state
- Error: Component with error state
- LongContent: Component with edge case content
- Empty: Component with no data
Storybook-Specific Code Patterns
Store Access
// In stories, access stores through the setup function
export const WithStore: Story = {
render: () => ({
setup() {
const store = useMyStore()
return { store }
},
template: '<MyComponent :data="store.data" />'
})
}
Event Testing
export const WithEvents: Story = {
args: {
onUpdate: fn() // Use Storybook's fn() for action logging
}
}
Configuration Notes
Vue App Setup
The Storybook preview is configured with:
- Pinia stores initialized
- PrimeVue with ComfyUI theme
- i18n internationalization
- All necessary CSS imports
Build Configuration
- Vite integration with proper alias resolution
- Manual chunking for better performance
- TypeScript support with strict checking
- CSS processing for Vue components
Troubleshooting
Common Issues
- Import Errors: Verify
@/alias is working correctly - Missing Styles: Ensure CSS imports are in
preview.ts - Store Errors: Check store initialization in setup
- Type Errors: Use proper TypeScript types for story args
Debug Commands
# Check TypeScript issues
pnpm typecheck
# Lint Storybook files
pnpm lint .storybook/
# Build to check for production issues
pnpm build-storybook
File Organization
.storybook/
├── main.ts # Core configuration
├── preview.ts # Global setup and decorators
├── README.md # User documentation
└── CLAUDE.md # This file - Claude guidelines
src/
├── components/
│ └── MyComponent/
│ ├── MyComponent.vue
│ └── MyComponent.stories.ts
Integration with ComfyUI
Available Context
Stories have access to:
- All ComfyUI stores (widgetStore, colorPaletteStore, etc.)
- PrimeVue components with ComfyUI theming
- Internationalization system
- ComfyUI CSS variables and styling
Testing Components
When testing ComfyUI-specific components:
- Use realistic node definitions and data structures
- Test with different node types (sampling, conditioning, etc.)
- Verify proper CSS theming and dark/light modes
- Check component behavior with various input combinations
Performance Considerations
- Use manual chunking for large dependencies
- Minimize bundle size by avoiding unnecessary imports
- Leverage Storybook's lazy loading capabilities
- Profile build times and optimize as needed
Best Practices
- Keep Stories Focused: Each story should demonstrate one specific use case
- Use Descriptive Names: Story names should clearly indicate what they show
- Document Complex Props: Use JSDoc comments for complex prop types
- Test Edge Cases: Create stories for unusual but valid use cases
- Maintain Consistency: Follow established patterns in existing stories