Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ned-alyona/8abeea442bd12bd347b29ec8aeef51d7 to your computer and use it in GitHub Desktop.
Save ned-alyona/8abeea442bd12bd347b29ec8aeef51d7 to your computer and use it in GitHub Desktop.
Unit and Integration Testing of Redux/React Forms
let store, PropertySelfOwnedFormComponentWrapper, PropertySelfOwnedFormComponent, receivedNamesList;
beforeEach(() => {
store = mockStore(initialState);
PropertySelfOwnedFormComponentWrapper = (props) => (
<PropertySelfOwnedForm {...defaultProps} {...props} store={store} />
);
PropertySelfOwnedFormComponent = shallow(<PropertySelfOwnedFormComponentWrapper />).dive();
});
<ButtonsToolbar
onNavigate={[MockFunction]}
onSubmit={[MockFunction]}
onSubmitAndNavigate={[MockFunction]}
store={
Object {
"clearActions": [Function],
"dispatch": [Function],
"getActions": [Function],
"getState": [Function],
"replaceReducer": [Function],
"subscribe": [Function],
}
}
/>
it('check if `Save` button react to form changes', () => {
expect(PropertySelfOwnedFormComponent.find('button.button--accent').props().disabled).toEqual(true);
const streetNumberField = PropertySelfOwnedFormComponent.find('input[name="street_number"]');
streetNumberField.simulate('change', { target: {value: '10'} });
expect(PropertySelfOwnedFormComponent.find('button.button--accent').props().disabled).toEqual(false);
});
it('PropertySelfOwnedForm renders correctly with PropertyTypeApartment', () => {
const props = {
propertyType: 10
},
PropertySelfOwnedFormComponent = shallow(<PropertySelfOwnedFormComponentWrapper {...props} />).dive();
const receivedNamesList = PropertySelfOwnedFormComponent.find('form').find('Col').children().map(node => node.props().name);
const expectedNamesList = [
'number_of_apartments',
'floor_number',
'balcony_terrace_place',
'apartments_number_of_outdoor_parking_spaces',
'apartments_number_of_garages',
'apartments_number_of_garages_individual'
];
expect(receivedNamesList).toEqual(expect.arrayContaining(expectedNamesList));
});
it('PropertySelfOwnedForm renders correctly with PropertyTypeHouse', () => {
receivedNamesList = PropertySelfOwnedFormComponent.find('form').find('Col').children().map(node => node.props().name);
const expectedNamesList = [
'building_volume',
'site_area',
'building_volume_standard',
'number_of_garages_house',
'number_of_garages_separate_building',
'number_of_parking_spots_covered',
'number_of_parking_spots_uncovered'
];
expect(receivedNamesList).toEqual(expect.arrayContaining(expectedNamesList));
});
it('snapshot difference between 2 React forms state', () => {
const props = {
propertyType: 10
},
PropertySelfOwnedFormComponentApartment = shallow(<PropertySelfOwnedFormComponentWrapper {...props} />).dive();
expect(
snapshotDiff(
PropertySelfOwnedFormComponent,
PropertySelfOwnedFormComponentApartment
)
).toMatchSnapshot();
});
it('create snapshot for PropertySelfOwnedForm with PropertyTypeHouse fields', () => {
expect(PropertySelfOwnedFormComponent).toMatchSnapshot();
});
it('create snapshot for PropertySelfOwnedForm with PropertyTypeApartment fields', () => {
const props = {
propertyType: 10
},
PropertySelfOwnedFormComponent = shallow(<PropertySelfOwnedFormComponentWrapper {...props} />).dive();
expect(PropertySelfOwnedFormComponent).toMatchSnapshot();
});
it('PropertySelfOwnedForm renders correctly with PropertyTypeHouse', () => {
expect(PropertySelfOwnedFormComponent).toMatchSnapshot();
});
it('PropertySelfOwnedForm renders correctly with PropertyTypeApartment', () => {
const props = {
propertyType: 10
},
PropertyTypeApartmentWrapper = mount(<PropertySelfOwnedFormComponentWrapper {...props} />);
expect(PropertyTypeApartmentWrapper).toMatchSnapshot();
});
global.getDjangoParam = () => djangoParamsChoices;
let PropertySelfOwnedFormComponent;
const history = {
push: jest.fn(),
location: {
pathname: '/en/data-collection/property-valuation/'
},
listen: () => {}
},
defaultProps = {
propertyType: 1,
resource: propertyDetailsResource,
handleSubmit: (fn) => fn,
onSubmit: jest.fn(),
onSubmitAndNavigate: jest.fn(),
onNavigate: jest.fn()
},
store = createStore(combineReducers({ form: formReducer })),
Decorated = reduxForm({
form: 'property-details-form'
})(PropertySelfOwnedForm),
PropertySelfOwnedFormComponentWrapper = (props) => (
<Provider store={store}>
<Router history={history}>
<Decorated {...defaultProps} {...props} />
</Router>
</Provider>
);
it('check event on `Next` button', () => {
const propertySelfOwnedFormButton = PropertySelfOwnedFormComponent.find('button.button--secondary').at(1);
propertySelfOwnedFormButton.simulate('click');
expect(defaultProps.onNavigate).toHaveBeenCalled();
});
it('check event on `Save & continue` button', () => {
const streetNumberField = PropertySelfOwnedFormComponent.find('input[name="street_number"]');
streetNumberField.simulate('change', { target: {value: '10'} });
const propertySelfOwnedFormButton = PropertySelfOwnedFormComponent.find('button.button--secondary').at(0);
propertySelfOwnedFormButton.simulate('click');
expect(defaultProps.onSubmitAndNavigate).toHaveBeenCalled();
});
it('check event on `Save` button', () => {
const streetNumberField = PropertySelfOwnedFormComponent.find('input[name="street_number"]');
streetNumberField.simulate('change', { target: {value: '10'} });
const propertySelfOwnedFormButton = PropertySelfOwnedFormComponent.find('button.button--accent');
propertySelfOwnedFormButton.simulate('click');
expect(defaultProps.onSubmit).toHaveBeenCalled();
});
import ButtonsToolbar from 'shared/widgets/buttons/ButtonsToolbar';
<ButtonsToolbar {...restProps} />
import { mount } from 'enzyme';
import { createStore, combineReducers } from 'redux';
import { Provider } from 'react-redux';
import { Router } from 'react-router-dom';
import { reduxForm, reducer as formReducer } from 'redux-form';
import propertyDetailsResource from 'store/propertyDetailsResource';
import djangoParamsChoices from 'tests/__mocks__/djangoParamsChoices';
import PropertySelfOwnedForm from '../PropertySelfOwnedForm';
import { shallow } from 'enzyme';
import djangoParamsChoices from 'tests/__mocks__/djangoParamsChoices';
import PropertySelfOwnedForm from '../PropertySelfOwnedForm';
import configureStore from 'redux-mock-store';
const snapshotDiff = require('snapshot-diff');
beforeEach(() => {
PropertySelfOwnedFormComponent = mount(
<PropertySelfOwnedFormComponentWrapper />
);
});
it('render connected form component', () => {
expect(PropertySelfOwnedFormComponent.length).toEqual(1);
});
const defaultProps = {
propertyType: 1
};
<PropertySelfOwnedForm
propertyType={1}
onSubmit={[Function: mockConstructor]}
onSubmitAndNavigate={[Function: mockConstructor]}
onNavigate={[Function: mockConstructor]}
store={{...}}
/>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment