Skip to content
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

Added context support #62

Merged
merged 1 commit into from
Dec 10, 2015
Merged

Added context support #62

merged 1 commit into from
Dec 10, 2015

Conversation

lelandrichardson
Copy link
Collaborator

to: @ljharb @goatslacker

Adds support for context with mount and shallow.

The API looks like:

const context = { name: 'foo' };
const wrapper = mount(<Component />, { context });
const context = { name: 'foo' };
const wrapper = shallow(<Component />, { context });

Additionally, there is a .setContext(newContext) prototype method on each wrapper class.

Fixes #49

Note: this will constitute a minor change (new feature, backwards compatible)


#### Common Gotchas

- `.setContext()` can only be used on a wrapper that was initially created with a call to `mount()`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this guaranteed, ie, will it throw an exception? I don't see any tests that cover this case.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good call. will add some tests.

@lelandrichardson
Copy link
Collaborator Author

@ljharb tests added. comments addressed.

@ljharb
Copy link
Member

ljharb commented Dec 9, 2015

Changes LGTM - @goatslacker should weigh in on the context stuff tho since he's got more experience with it than I

@lelandrichardson
Copy link
Collaborator Author

Looking at the coverage info with the line numbers mismatched is a PITA. I'm going to submit a followup PR that fixes istanbul line numbers, as well as improve coverage where needed

// specified in both the options AND the child component defines `contextTypes` statically.
// In that case, we define both a `getChildContext()` function and a `childContextTypes` prop.
Object.assign(spec, {
childContextTypes: node.type.contextTypes,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're mutating spec here. Is that ok? Seems like a bad idea

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah it's ok.

@goatslacker
Copy link
Contributor

LGTM

lelandrichardson added a commit that referenced this pull request Dec 10, 2015
@lelandrichardson lelandrichardson merged commit 9d5d3de into master Dec 10, 2015
@lelandrichardson lelandrichardson deleted the lmr--context-support branch December 10, 2015 01:50
this.component = renderIntoDocument(
<ReactWrapperComponent
Component={nodes.type}
props={nodes.props}
context={options.context}
/>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not due to this diff, but the airbnb styleguide shows this closing wrapper to be back 2 spaces. https://github.com/airbnb/javascript/tree/master/react#alignment

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tru dat

@kujon
Copy link

kujon commented May 4, 2016

Super useful PR. May I ask what is the reason for render not having this functionality?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants