# Source: https://react-spectrum.adobe.com/testing.md

# Source: https://react-spectrum.adobe.com/TreeView/testing.md

# Source: https://react-spectrum.adobe.com/Tabs/testing.md

# Source: https://react-spectrum.adobe.com/TableView/testing.md

# Source: https://react-spectrum.adobe.com/RadioGroup/testing.md

# Source: https://react-spectrum.adobe.com/Picker/testing.md

# Source: https://react-spectrum.adobe.com/Menu/testing.md

# Source: https://react-spectrum.adobe.com/Dialog/testing.md

# Source: https://react-spectrum.adobe.com/ComboBox/testing.md

# Source: https://react-spectrum.adobe.com/CheckboxGroup/testing.md

# Testing CheckboxGroup

## Test utils

`@react-spectrum/test-utils` offers common checkbox group interaction testing utilities. Install it with your preferred package manager.

```bash
npm install @react-spectrum/test-utils --dev
```

<InlineAlert variant="notice">
  <Heading>Requirements</Heading>
  <Content>Please note that this library uses [@testing-library/react@16](https://www.npmjs.com/package/@testing-library/react) and [@testing-library/user-event@14](https://www.npmjs.com/package/@testing-library/user-event). This means that you need to be on React 18+ in order for these utilities to work.</Content>
</InlineAlert>

Initialize a `User` object at the top of your test file, and use it to create a `CheckboxGroup` pattern tester in your test cases. The tester has methods that you can call within your test to query for specific subcomponents or simulate common interactions.

```ts
// CheckboxGroup.test.ts
import {render} from '@testing-library/react';
import {User} from '@react-spectrum/test-utils';

let testUtilUser = new User({
  interactionType: 'mouse',
  advanceTimer: jest.advanceTimersByTime
});
// ...

it('CheckboxGroup can select multiple checkboxes', async function () {
  // Render your test component/app and initialize the checkbox group tester
  let {getByTestId} = render(
    <CheckboxGroup data-testid="test-checkboxgroup">
    ...
    </CheckboxGroup>
  );
  let checkboxGroupTester = testUtilUser.createTester('CheckboxGroup', {root: getByTestId('test-checkboxgroup')});
  expect(checkboxGroupTester.selectedCheckboxes).toHaveLength(0);

  await checkboxGroupTester.toggleCheckbox({checkbox: 0});
  expect(checkboxGroupTester.checkboxes[0]).toBeChecked();
  expect(checkboxGroupTester.selectedCheckboxes).toHaveLength(1);

  await checkboxGroupTester.toggleCheckbox({checkbox: 4});
  expect(checkboxGroupTester.checkboxes[4]).toBeChecked();
  expect(checkboxGroupTester.selectedCheckboxes).toHaveLength(2);
});
```

## API

### User

### CheckboxGroupTester

## Testing FAQ

<PatternTestingFAQ patternName="checkbox group"/>