RSK comes with the following libraries for testing purposes:
- Mocha - Node.js and browser test runner
- Chai - Assertion library
- Enzyme - Testing utilities for React
You may also want to take a look at the following related packages:
To test your application simply run the
npm test
command which will:
- recursively find all files ending with
.test.js
in yoursrc/
directory - mocha execute found files
npm test
- test filenames MUST end with
test.js
ornpm test
will not be able to detect them - test filenames SHOULD be named after the related component (e.g. create
Login.test.js
forLogin.js
component)
To help you on your way RSK comes with the following basic test case you can use as a starting point:
import React from 'react';
import { expect } from 'chai';
import { shallow } from 'enzyme';
import App from '../App';
import Layout from './Layout';
describe('Layout', () => {
it('renders children correctly', () => {
const wrapper = shallow(
<App context={{ insertCss: () => {} }}>
<Layout>
<div className="child" />
</Layout>
</App>
);
expect(wrapper.contains(<div className="child" />)).to.be.true;
});
});
React-intl users MUST render/wrap components inside an IntlProvider like the example below:
The example below example is a drop-in test for the RSK Header
component:
import React from 'react';
import Header from './Header';
import IntlProvider from 'react-intl';
import Navigation from '../../components/Navigation';
describe('A test suite for <Header />', () => {
it('should contain a <Navigation/> component', () => {
it('rendering', () => {
const wrapper = renderIntoDocument(<IntlProvider locale="en"><Header /></IntlProvider>);
expect(wrapper.find(Navigation)).to.have.length(1);
});
});
});
Please note that NOT using IntlProvider will produce the following error:
Invariant Violation: [React Intl] Could not find required
intl
object. needs to exist in the component ancestry.
Running RSK eslint will also scan your test files:
npm run eslint