Skip to content

Commit 730927a

Browse files
test(react): update toggle tests to use react testing library (#10452)
* chore: check in progress * test(react): update Toggle tests to rtl Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
1 parent 1d3cc3b commit 730927a

File tree

1 file changed

+60
-105
lines changed

1 file changed

+60
-105
lines changed

packages/react/src/components/Toggle/Toggle-test.js

Lines changed: 60 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -7,131 +7,86 @@
77

88
import React from 'react';
99
import Toggle from '../Toggle';
10-
import { mount } from 'enzyme';
11-
import { settings } from 'carbon-components';
12-
13-
const { prefix } = settings;
14-
describe('Toggle', () => {
15-
const commonProps = {
16-
'aria-label': 'Toggle label',
17-
labelA: 'Off',
18-
labelB: 'On',
19-
labelText: 'Toggle label',
20-
};
21-
22-
describe('Renders as expected', () => {
23-
const wrapper = mount(<Toggle {...commonProps} id="toggle-1" />);
24-
25-
const input = wrapper.find('input');
26-
27-
it('Switch and label Ids should match', () => {
28-
const toggleLabel = wrapper.find(`.${prefix}--toggle__label`);
29-
expect(input.id).toEqual(toggleLabel.htmlFor);
30-
});
31-
32-
it('should set defaultChecked as expected', () => {
33-
expect(input.props().defaultChecked).toEqual(false);
34-
wrapper.setProps({ defaultToggled: true });
35-
expect(wrapper.find('input').props().defaultChecked).toEqual(true);
36-
});
37-
38-
it('Can set defaultToggled state', () => {
39-
wrapper.setProps({ defaultToggled: true });
40-
expect(
41-
wrapper.find(`.${prefix}--toggle-input`).props().defaultChecked
42-
).toEqual(true);
10+
import { render, screen } from '@testing-library/react';
11+
import userEvent from '@testing-library/user-event';
12+
import '../../../../components/scss/components/toggle/_toggle.scss';
13+
14+
describe('Toggle RTL', () => {
15+
describe('Behaviors', () => {
16+
it('toggles on click', () => {
17+
render(<Toggle id="test-id" />);
18+
expect(screen.getByText('Off')).toBeVisible();
19+
expect(screen.getByText('On')).not.toBeVisible();
20+
userEvent.click(screen.getByRole('checkbox'));
21+
expect(screen.getByText('On')).toBeVisible();
22+
expect(screen.getByText('Off')).not.toBeVisible();
4323
});
4424

45-
it('Should add extra classes that are passed via className', () => {
46-
wrapper.setProps({ className: 'extra-class' });
47-
expect(wrapper.find('div').hasClass('extra-class')).toEqual(true);
25+
it('toggles on keydown - enter', () => {
26+
render(<Toggle id="test-id" />);
27+
expect(screen.getByText('Off')).toBeVisible();
28+
expect(screen.getByText('On')).not.toBeVisible();
29+
userEvent.type(screen.getByRole('checkbox'), 'enter');
30+
expect(screen.getByText('On')).toBeVisible();
31+
expect(screen.getByText('Off')).not.toBeVisible();
4832
});
4933

50-
it('Can be disabled', () => {
51-
wrapper.setProps({ disabled: true });
52-
expect(wrapper.find(`.${prefix}--toggle-input`).props().disabled).toEqual(
53-
true
54-
);
34+
it('toggles on keydown - space', () => {
35+
render(<Toggle id="test-id" />);
36+
expect(screen.getByText('Off')).toBeVisible();
37+
expect(screen.getByText('On')).not.toBeVisible();
38+
userEvent.type(screen.getByRole('checkbox'), 'space');
39+
expect(screen.getByText('On')).toBeVisible();
40+
expect(screen.getByText('Off')).not.toBeVisible();
5541
});
42+
});
5643

57-
it('Can have a labelA', () => {
58-
wrapper.setProps({ labelA: 'labelA-test' });
59-
expect(wrapper.find(`.${prefix}--toggle__text--off`).text()).toEqual(
60-
'labelA-test'
44+
describe('Props', () => {
45+
it('add custom class name to wrapper div', () => {
46+
const { container } = render(
47+
<Toggle id="test-id" className="custom-class" />
6148
);
49+
expect(container.firstChild).toHaveClass('custom-class');
6250
});
6351

64-
it('Can have a labelB', () => {
65-
wrapper.setProps({ labelB: 'labelB-test' });
66-
expect(wrapper.find(`.${prefix}--toggle__text--on`).text()).toEqual(
67-
'labelB-test'
68-
);
52+
it('sets toggled based on defaultToggled on render', () => {
53+
render(<Toggle id="test-id" defaultToggled={true} />);
54+
expect(screen.getByText('On')).toBeVisible();
6955
});
70-
});
71-
72-
it('toggled prop sets checked prop on input', () => {
73-
const wrapper = mount(<Toggle {...commonProps} id="test" toggled />);
74-
75-
const input = () => wrapper.find('input');
76-
expect(input().props().checked).toEqual(true);
7756

78-
wrapper.setProps({ toggled: false });
79-
expect(input().props().checked).toEqual(false);
80-
});
81-
82-
describe('events', () => {
83-
it('passes along onChange to <input>', () => {
57+
it('calls onChange when the control is changed', () => {
8458
const onChange = jest.fn();
85-
const id = 'test-input';
86-
const wrapper = mount(
87-
<Toggle {...commonProps} id={id} onChange={onChange} />
88-
);
89-
90-
const input = wrapper.find('input');
91-
const inputElement = input.instance();
92-
93-
inputElement.checked = true;
94-
wrapper.find('input').simulate('change');
95-
96-
expect(
97-
onChange.mock.calls.map((call) =>
98-
call.map((arg, i) => (i > 0 ? arg : arg.target))
99-
)
100-
).toEqual([[inputElement]]);
59+
render(<Toggle id="test-id" onChange={onChange} />);
60+
userEvent.click(screen.getByRole('checkbox'));
61+
expect(onChange).toHaveBeenCalled();
10162
});
10263

103-
it('should invoke onToggle with expected arguments', () => {
64+
it('calls onToggle when toggled', () => {
10465
const onToggle = jest.fn();
105-
const id = 'test-input';
106-
const wrapper = mount(
107-
<Toggle {...commonProps} id={id} onToggle={onToggle} />
108-
);
109-
110-
const input = wrapper.find('input');
111-
const inputElement = input.instance();
112-
113-
inputElement.checked = true;
114-
wrapper.find('input').simulate('change');
115-
116-
const call = onToggle.mock.calls[0];
117-
118-
expect(call[0]).toEqual(true);
119-
expect(call[1]).toEqual(id);
120-
expect(call[2].target).toBe(inputElement);
66+
render(<Toggle id="test-id" onToggle={onToggle} />);
67+
userEvent.click(screen.getByRole('checkbox'));
68+
expect(onToggle).toHaveBeenCalled();
12169
});
122-
});
12370

124-
describe('ToggleSmall', () => {
125-
const wrapper = mount(<Toggle {...commonProps} id="toggle-1" size="sm" />);
71+
it('takes in custom labels for toggled and untoggled states', () => {
72+
render(<Toggle id="test-id" labelA="test On" labelB="test Off" />);
73+
expect(screen.getByText('test On')).toBeInTheDocument();
74+
expect(screen.getByText('test Off')).toBeInTheDocument();
75+
});
12676

127-
it('Sets the `ToggleSmall` className', () => {
128-
const input = wrapper.find('input');
129-
expect(input.hasClass(`${prefix}--toggle-input--small`)).toEqual(true);
77+
it('sets toggled based on toggled prop', () => {
78+
const { rerender } = render(<Toggle id="test-id" toggled={false} />);
79+
expect(screen.getByText('Off')).toBeVisible();
80+
rerender(<Toggle id="test-id" toggled={true} />);
81+
expect(screen.getByText('On')).toBeVisible();
13082
});
13183

132-
it('Renders a checkmark SVG', () => {
133-
const svg = wrapper.find(`.${prefix}--toggle__check`);
134-
expect(svg.length).toBe(1);
84+
it('passes extra props to input', () => {
85+
render(<Toggle id="test-id" aria-disabled={true} />);
86+
expect(screen.getByRole('checkbox')).toHaveAttribute(
87+
'aria-disabled',
88+
'true'
89+
);
13590
});
13691
});
13792
});

0 commit comments

Comments
 (0)