-
-
Notifications
You must be signed in to change notification settings - Fork 9.4k
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
Shallow rendering broke when upgrading to Storybook 5 #7020
Comments
@shilman the workaround doesn't always work. Doesn't work for HOC wrapped components that you try to unwrap with the |
@shilman I don't know we've ever really resolved this question of storyshots/shallow rendering/decorators. In SB5 we added a However I think this is an unsatisfactory solution because in many cases the decorators are needed to render the story properly (as opposed to used for layout or utils like the console addon) -- decorators that do things like supply context to components. Once upon a time we proposed classify decorators into various kinds, although that seems pretty heavy too. I'm not sure what the best way forward in the short or long term is. |
@tmeasday I'm a huge I'm sure they're needed for rendering the complete story, and even for image snapshot tests; but for shallow rendering, I'd like for a way not to get the decorators, so that I can pass whatever the decorator is passing down myself: // MyComponent.js
import { injectIntl } from 'react-intl'
let MyComponent = ({ intl }) => <div>{intl.formatMessage({ id: 'hello.world' })}</div>
let MyComponent = injectIntl(MyComponent)
// MyComponent.test.js
import { intl } from '../test-utils/intl'
const unwrap = node => {
unwrappedType = node.type.WrappedComponent
return React.createElement(unwrappedType, { ...node.props, intl })
}
// by unwrapping with the function above, I can pass a stub intl object
// and don't need `<IntlProvider>` in the hierarchy, and don't need `.dive()`
shallow(unwrap(MyComponent), { intl }) |
@chris-fran perhaps you could try using
I'm wondering about this.. what does the test-utils version of I guess I am not quite understanding why if you have some sensible mock you'd not use that in stories also. |
Hi everyone! Seems like there hasn't been much going on in this issue lately. If there are still questions, comments, or bugs, please feel free to continue the discussion. Unfortunately, we don't have time to get to every issue. We are always open to contributions so please send us a pull request if you would like to help. Inactive issues will be closed after 30 days. Thanks! |
Hey there, it's me again! I am going close this issue to help our maintainers focus on the current development roadmap instead. If the issue mentioned is still a concern, please open a new ticket and mention this old one. Cheers and thanks for using Storybook! |
Is this something that can be done? Even in the decorator knowing whether we're in a snapshot test or live preview, could be of help. const withThemeProvider = (Story, context) => {
if (context.type === 'snapshot') {
return <Story />
}
} |
That's definitely one option @alber70g -- in fact you could even write a "higher order decorator" that made any given decorator behave like that. We have talked about this issue in various other contexts and it still seems like something that we don't have a great answer to yet. |
Describe the bug
The shallow rendered serialized snapshots broke after I upgraded from 3 to 4 and 4 to 5.
It used to render the inside of my component:
But now it's rendering the ...outside(?) of it
To Reproduce
Steps to reproduce the behavior:
Expected behavior
My snapshots should not break, or at least should not render completely different output
Code snippets
System:
create-react-app
,jest
storyshots
5.1.3
Update
Using this works
Update 2
But it doesn't work if you're unwrapping your component from an HOC, like I am, sadly:
Update 3
Seems like the problem is that the
node
argument received by the renderer function (in the signature(node, options => shallow(node, options)
) is a<ReactDecorator />
, rather than a<MyComponent />
.For me, particulary, it breaks the suite as most of my components are wrapped by HoCs that I don't want to shallow render (ergo the
.WrappedComponent
pattern to unwrap). I don't have a workaround.Update 4
Fixed by commenting out the console plugin.
Forget everything above, just comment out this plugging and that'd be it.
For a long term solution I'll just be making use of
configPath
property on storyshots to pass a config file that does not include this decoratorThe text was updated successfully, but these errors were encountered: