Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minuteTest Storybook components by treating each story as a repeatable component state: check that it renders, add a play function for user interactions, and use accessibility or visual checks when they answer a separate question. For Vite-based Storybook frameworks, Storybook documents its Vitest addon as the integrated route; use the test runner when that addon is not compatible with your framework or setup. For a workflow spanning the full application, reuse stories in Playwright or Cypress end-to-end tests.
Choose what you need to test
A story sets up a component’s props and context for a particular state. Storybook describes stories as “test cases for your UI components in their various states and configurations.” Start with states that matter to users, such as a default view, empty state, validation feedback, or loading state where relevant. A story-level test verifies that represented state; it does not by itself cover every possible state or the full application.
| Question | Useful check | What it tells you |
|---|---|---|
| Does this state render? | Render check | The story rendered without an error. |
| Does the component respond to a user action? | Interaction test in a play function |
The action produces the expected visible result or callback. |
| Are there detectable accessibility issues? | Automated accessibility check | Automated checks can identify some issues; they do not establish complete accessibility. |
| Did the appearance change unexpectedly? | Visual test | The rendered appearance can be compared, subject to the visual-testing setup. |
| Does a complete application workflow work? | End-to-end test | A browser test can exercise the broader running application. |
Set up stories for meaningful states
Write a story for each distinct state you want to verify, configuring the component’s props and any needed context. Prefer states tied to user-visible behavior or a component contract over stories that merely duplicate minor prop variations. A useful set might include a normal display, invalid input, and a loading state if the component supports those conditions.
Keep the state setup in the story so that a test can reproduce it consistently. When a failure occurs, the story provides a focused example to inspect without first navigating through the entire application.
#1 Best Overall
Run a render check
A basic Storybook test checks whether a story renders successfully. Storybook’s testing workflow uses the Vitest addon to transform stories into tests; its documented render test passes when the story renders and fails if it errors. This is useful smoke coverage for the states you have stories for, but it does not prove that controls work or that a complete user journey succeeds.
For a Vite-based project, Storybook’s overview points to npx storybook add @storybook/addon-vitest. Requirements and configuration depend on the Storybook version and framework, so check the current Vitest addon integration guide before applying the command to a particular project.
Test interactions with a play function
For an interactive component, define an asynchronous play function on the story. Use its canvas and user-event helpers to act as a user would, then assert the visible outcome or a mocked callback. Storybook’s examples include entering credentials, clicking a button, and checking a mocked function; choose assertions that match the behavior users can observe or the component’s contract.
Rank #2
For example, the shape of a story-level interaction test is:
export const CanSubmit = {
play: async ({ canvas, userEvent }) => {
await userEvent.type(canvas.getByLabelText('Email'), '[email protected]');
await userEvent.click(canvas.getByRole('button', { name: 'Continue' }));
await expect(canvas.getByText('Check your inbox')).toBeVisible();
},
};
This illustrates the sequence rather than a drop-in story: the component must expose the accessible label, button name, and resulting message shown in the assertions, and the imports and story format depend on your project’s setup. Avoid asserting implementation details when a user-visible result is available.
Use Storybook’s Interactions panel to inspect and step through the recorded interaction sequence while debugging. The Vitest addon can run tests in Storybook’s UI, an editor, the CLI, or CI; the test runner is run from a terminal or CI.
Rank #3
Choose the Storybook test integration
Storybook documents two execution options with different compatibility and workflow trade-offs. The details below reflect its comparison; check compatibility for your installed Storybook version and framework before choosing.
| Decision axis | Vitest addon | Storybook test runner |
|---|---|---|
| Framework support | Requires a Vite-based Storybook framework. Storybook documents Next.js support with @storybook/nextjs-vite. |
Supports all Storybook frameworks. |
| Execution model | Transforms stories into tests using Vitest and browser mode; does not require a running Storybook instance to test stories. | Visits stories in a running Storybook instance, executes their play functions, and listens for results. |
| Test types in Storybook’s comparison | Interaction and accessibility; visual testing is available with the appropriate addon. Snapshot testing is not listed. | Interaction, accessibility, and snapshot. Visual testing is not listed. |
| Where tests can run | Storybook UI, editor, CLI, and CI. | CLI and CI. |
| Runner | Vitest. | Jest. |
For a compatible Vite-based framework, the Vitest addon is Storybook’s integrated route. If you need support beyond Vite-based frameworks, or cannot use the addon in your setup, the test runner is the documented alternative and requires a running Storybook instance. Storybook’s migration guide describes the Vitest-based solution as the successor to the test runner and says existing stories do not need to change just to migrate.
Combine interaction tests with other checks
Interaction tests are not a substitute for every other kind of testing. Use each method for the question it answers:
Rank #4
- Accessibility: Storybook’s accessibility addon runs automated checks on stories. Treat results as a way to find some issues, not as proof of full accessibility.
- Visual appearance: Visual tests compare how a story looks. Storybook’s comparison lists visual testing for the Vitest addon when the appropriate addon is used.
- Snapshots: Storybook’s comparison lists snapshot testing for the test runner, not the Vitest addon.
- Whole-app behavior: Reuse stories in Playwright or Cypress end-to-end tests when the behavior depends on the running application and its broader workflow.
Applying interaction tests to every component can be expensive to maintain. Prioritize meaningful user behavior, then combine interaction checks with render, accessibility, visual, or end-to-end coverage where each adds distinct information.
Troubleshoot common setup and test failures
- The Vitest addon does not work with the project’s framework: It requires a Vite-based Storybook framework. Confirm the framework’s current support in the integration guide; consider the test runner if the addon cannot be used.
- The test runner cannot reach stories: It visits stories in a running Storybook instance. Start Storybook and point the runner at that instance using the current instructions for your version.
- A render check fails: Inspect the story’s render error and its configured props, context, and dependencies. A render failure does not necessarily mean the interaction assertion is wrong.
- A
playassertion fails: Verify the accessible name or label in the query matches what the rendered component exposes, and check whether the action produces the expected state. Step through the sequence in the Interactions panel. - An older tutorial’s command or package does not match: Storybook documents a migration from its Jest-based test runner to the Vitest addon. Check the current versioned documentation rather than copying legacy setup instructions unchanged.
Or skip the browser setup
For a website screenshot unrelated to executing a component’s Storybook tests, ScreenshotNeo offers a one-request screenshot API and an MCP server for AI agents. It is a separate website-capture tool, not a replacement for Storybook’s component test integrations.
For example, request a screenshot of the running Storybook URL:
Recommended Free Tools
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://your-storybook.example.com -o shot.webp
See the ScreenshotNeo API documentation for request options. Cookie banners, popups, and chat widgets are removed before capture; bot checks, blank pages, and failed loads are never billed. Its MCP server lets AI agents take screenshots. The free plan includes 1,000 screenshots a month with no card, and paid plans start at $5 for 3,000. Sign up for free.
Frequently Asked Questions
Can a Storybook interaction test replace an end-to-end test?
No. It tests behavior in a story’s component state; use Playwright or Cypress when the question involves the broader running application.
Do I need to change my stories to move from the test runner to the Vitest addon?
Storybook’s migration guide says existing stories do not need to change just to migrate.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.




