1.1.0 • Published 6 years ago
enzyme-context-utils v1.1.0
Enzyme Context Utils
The module exports some utilities that improve the ease of authoring enzyme-context plugins:
ContextWatcher()
A class that gets the context of a Provider and notifies listeners when the context changes.
Arguments
render((WatcherComponent: React.ComponentClass) => React.ReactElement): a function that accepts a react component as its only argument and must return some JSX that renders that react component as a child of a Provider.childContextTypes(ValidationMap(optional)): thechildContextTypesof the provider. This argument only needs to be passed if the root component returned byrenderdoes not definechildContextTypes.
Attributes
value(any): the context of the provider
Methods
listen(listener: (context: any) => void): registers a listener to be notified of context changes- Arguments
listener: ((context: any) => void): the listener function that will be called with the context whenever it changes
- Arguments
stop(): stops listening for changes and cleans up any mounted components
Example
import { createStore } from 'redux';
import { Provider } from 'react-redux';
import { getContextFromProvider } from 'enzyme-context-utils';
const store = createStore(() => ({}));
const context = new ContextWatcher(Watcher => (
<Provider store={store}>
<Watcher />
</Provider>
));
expect(context.value).toEqual({ store });
context.listen(newContext => {
// called whenever context changes
});bindContextToWrapper(context: ContextWatcher) => (wrapper: ReactWrapper | ShallowWrapper) => () => void;
A utility that binds a ContextWatcher to a given enzyme wrapper, updating its context whenever the watcher's context changes.
Arguments
context(ContextWatcher): the context to watch
Returns
(wrapper: ReactWrapper | ShallowWrapper) => () => void: a function that accepts the enzyme wrapper to bind to- Arguments
wrapper(ReactWrapper | ShallowWrapper): the enzyme wrapper to bind to
- Returns:
() => void: a function that will stop listening for context changes when called
- Arguments
Example
This method is useful for setting the updater attributes of an enzyme-context plugin return:
const myPlugin = (node, options) => {
const store = createStore(() => ({}));
const context = new ContextWatcher(Watcher => (
<Provider store={store}>
<Watcher />
</Provider>
));
return {
node,
options,
controller: store,
updater: bindContextToWrapper(context),
};
};EnzymePlugin<O extends object, C>
A TypeScript interface defining an enzyme-context plugin.
Arguments
O(extends object): the shape of the custom parameters users may pass tomount/shallowwhen this plugin is enabled.C: the type of thecontrollerthat will be returned.
Example
import { EnzymePlugin } from 'enzyme-context-utils';
import { createStore, Store, AnyAction } from 'redux';
interface ReduxPluginMountOptions {
initialActions?: AnyAction[];
}
const reduxPlugin: EnzymePlugin<ReduxPluginMountOptions, Store> = (node, options) => {
const store = createStore(() => ({}));
return {
node,
options: {
...options,
context: {
...options.context,
store,
},
},
controller: store,
};
};