prometheus
65 строк · 2.4 Кб
1import * as React from 'react';
2import { shallow } from 'enzyme';
3import Checkbox from './Checkbox';
4import { FormGroup, Label, Input } from 'reactstrap';
5
6const MockCmp: React.FC = () => <div className="mock" />;
7
8describe('Checkbox', () => {
9it('renders with subcomponents', () => {
10const checkBox = shallow(<Checkbox />);
11[FormGroup, Input, Label].forEach((component) => expect(checkBox.find(component)).toHaveLength(1));
12});
13
14it('passes down the correct FormGroup props', () => {
15const checkBoxProps = { wrapperStyles: { color: 'orange' } };
16const checkBox = shallow(<Checkbox {...checkBoxProps} />);
17const formGroup = checkBox.find(FormGroup);
18expect(Object.keys(formGroup.props())).toHaveLength(4);
19expect(formGroup.prop('className')).toEqual('custom-control custom-checkbox');
20expect(formGroup.prop('children')).toHaveLength(2);
21expect(formGroup.prop('style')).toEqual({ color: 'orange' });
22expect(formGroup.prop('tag')).toEqual('div');
23});
24
25it('passes down the correct FormGroup Input props', () => {
26const results: string[] = [];
27const checkBoxProps = {
28onChange: (): void => {
29results.push('clicked');
30},
31};
32const checkBox = shallow(<Checkbox {...checkBoxProps} id="1" />);
33const input = checkBox.find(Input);
34expect(Object.keys(input.props())).toHaveLength(4);
35expect(input.prop('className')).toEqual('custom-control-input');
36expect(input.prop('id')).toMatch('1');
37expect(input.prop('type')).toEqual('checkbox');
38input.simulate('change');
39expect(results).toHaveLength(1);
40expect(results[0]).toEqual('clicked');
41});
42
43it('passes down the correct Label props', () => {
44const checkBox = shallow(
45<Checkbox id="1">
46<MockCmp />
47</Checkbox>
48);
49const label = checkBox.find(Label);
50expect(Object.keys(label.props())).toHaveLength(6);
51expect(label.prop('className')).toEqual('custom-control-label');
52expect(label.find(MockCmp)).toHaveLength(1);
53expect(label.prop('for')).toMatch('1');
54expect(label.prop('style')).toEqual({ userSelect: 'none' });
55expect(label.prop('tag')).toEqual('label');
56});
57
58it('shares checkbox `id` uuid with Input/Label subcomponents', () => {
59const checkBox = shallow(<Checkbox id="2" />);
60const input = checkBox.find(Input);
61const label = checkBox.find(Label);
62expect(label.prop('for')).toBeDefined();
63expect(label.prop('for')).toEqual(input.prop('id'));
64});
65});
66