-
-
Notifications
You must be signed in to change notification settings - Fork 9.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Portable Stories: Improve Handling of React Updates and Errors #29044
Conversation
☁️ Nx Cloud ReportCI is running/has finished running commands for commit 46aa6e0. As they complete they will appear below. Click to see the status, the terminal output, and the build insights. 📂 See all runs for this CI Pipeline Execution ✅ Successfully ran 1 targetSent with 💌 from NxCloud. |
ad08bfc
to
790fe8e
Compare
Co-authored-by: Yann Braga <[email protected]> Co-authored-by: Jeppe Reinhold <[email protected]>
790fe8e
to
483325a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🚀
Failed to publish canary version of this pull request, triggered by @valentinpalkovic. See the failed workflow run at: https://github.com/storybookjs/storybook/actions/runs/10716151501 |
…ybookjs/storybook into valentin/propagate-error-in-testing
7aac446
to
758aaa1
Compare
…ybookjs/storybook into valentin/propagate-error-in-testing
52c264f
to
7a573cf
Compare
7a573cf
to
714913d
Compare
f1964dd
to
ea1a533
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
19 file(s) reviewed, 2 comment(s)
Edit PR Review Bot Settings
|
||
const meta = { | ||
title: 'Example/ComponentWithError', | ||
component: ComponentWithError as any, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider removing 'as any' and properly typing the component
return globalThis.IS_REACT_ACT_ENVIRONMENT; | ||
} | ||
|
||
function withGlobalActEnvironment(actImplementation: (callback: () => void) => Promise<any>) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Consider adding a return type annotation for better type safety
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks! Great work
Closes #25304
What I did
This PR addresses several issues related to how React updates, errors, and asynchronous actions are handled during testing in Storybook’s portable stories:
preventActChecks
function and fully integrated React's act wrapper. This ensures that all React updates triggered by asynchronous actions (such as user events) are properly wrapped, allowing for consistent and reliable testing.WithCallback
helper function was removed in portable stories due to conflicts with act, which led to unresolved mountings and timeouts in tests.ComponentWithError
test case that ensures errors thrown during rendering are handled and reported as expected in tests.ErrorBoundary
within portable-stories was removed as it conflicted withact
. This change improves compatibility with React's testing utilities, ensuring more accurate test behavior.These changes streamline the testing process in Storybook, improving reliability by fully leveraging React’s act wrapper. As a result, users will see more predictable test behavior, especially when dealing with asynchronous updates and error scenarios. These improvements set a foundation for future testing enhancements in Storybook 9.0 and beyond, particularly around error boundaries and React lifecycle management.
Checklist for Contributors
Testing
The changes in this PR are covered in the following automated tests:
Manual testing
This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!
Documentation
MIGRATION.MD
Checklist for Maintainers
When this PR is ready for testing, make sure to add
ci:normal
,ci:merged
orci:daily
GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found incode/lib/cli/src/sandbox-templates.ts
Make sure this PR contains one of the labels below:
Available labels
bug
: Internal changes that fixes incorrect behavior.maintenance
: User-facing maintenance tasks.dependencies
: Upgrading (sometimes downgrading) dependencies.build
: Internal-facing build tooling & test updates. Will not show up in release changelog.cleanup
: Minor cleanup style change. Will not show up in release changelog.documentation
: Documentation only changes. Will not show up in release changelog.feature request
: Introducing a new feature.BREAKING CHANGE
: Changes that break compatibility in some way with current major version.other
: Changes that don't fit in the above categories.🦋 Canary release
This pull request has been released as version
0.0.0-pr-29044-sha-67f91ec6
. Try it out in a new sandbox by runningnpx [email protected] sandbox
or in an existing project withnpx [email protected] upgrade
.More information
0.0.0-pr-29044-sha-67f91ec6
valentin/propagate-error-in-testing
67f91ec6
1725528622
)To request a new release of this pull request, mention the
@storybookjs/core
team.core team members can create a new canary release here or locally with
gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=29044
Greptile Summary
This PR enhances React integration and error handling in Storybook's portable stories, focusing on improved testing reliability and consistency.
preventActChecks
and fully integrated React'sact
wrapper incode/lib/react-dom-shim/src/react-16.tsx
andreact-18.tsx
ComponentWithError
story incode/renderers/react/src/__test__/ComponentWithError.stories.tsx
to test error handlingact-compat.ts
incode/renderers/react/src/
to manage React's state updates during testingcode/renderers/react/src/portable-stories.tsx
to enhance error handling and React act integrationcode/renderers/react/src/renderToCanvas.tsx
to conditionally render Story component with or without ErrorBoundary based on act environment