react-fluxible-utils
A collection of extremely useful utils and components for React+Fluxible applications.
To start using this library, first install the package:
npm install react-fluxible-utils --save
Then you're all set up to use the following utils and components:
reactSafeRender
A wrapper around React, to handle errors thrown by the render method and life-cycle events. To use this wrapper, just replace the line where you import React with:
import {ReactSafeRender as React} from 'react-fluxible-utils';
const React = require('react-fluxible-utils').ReactSafeRender;
connectToStores
A wrapper around the Fluxible connectToStores
. The purpose of this wrapper is to not lose the original component as normally is the case, but still have it accessible as a .original
property. This is needed when testing a component with the shallowComponent
utility as described later. To use this wrapper, just replace the line where you import connectToStores
with:
import {connectToStores} from 'react-fluxible-utils';
const connectToStores = require('react-fluxible-utils').connectToStores;
shallowComponent
A class useful for testing React components. This can be used as follows:
import {ShallowComponent} from 'react-fluxible-utils';
import ComponentToTest from 'ComponentToTest.jsx';
import Store from 'Store';
const component = new ShallowComponent(ComponentToTest).withProps({foo: 'bar'});
import { expect } from 'chai';
expect(component.get(SomeSubComponent)).to.be.ok;
expect(component.get(SomeSubComponent)).to.have.deep.property(...).that.deep.equals(...);
expect(component.getAll(SomeOtherSubComponent)).to.have.length(5);
import sinon from 'sinon';
const sampleData = {xxx: 'yyy'};
sinon.stub(Store.prototype, 'getDetails').returns(sampleData);
const componentWithStore = component.withStore(Store).getSelf();
expect(componentWithStore).to.have.deep.property('props.details').that.deep.equals(sampleData);
Store.prototype.getDetails.restore();
mockDispatcher
A class useful for testing Fluxible stores. This can be used as follows:
import {MockDispatcher} from 'react-fluxible-utils';
import StoreToTest from 'StoreToTest';
const dispatcherMock = new MockDispatcher(StoreToTest);
const store = dispatcherMock.getStore();
import { expect } from 'chai';
const sampleData = {foo: 'bar'};
dispatcherMock.dispatch('DETAILS_LOAD', sampleData);
expect(store.getDetails()).to.eql(sampleData);