Skip to content

Commit 00f8f05

Browse files
authored
Merge pull request #158 from testing-library/select
fix: fire onChange event on select element change
2 parents 1303a79 + fe018f3 commit 00f8f05

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

__tests__/react/selectoptions.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,27 @@ describe("userEvent.selectOptions", () => {
199199
expect(getByTestId("val3").selected).toBe(false);
200200
});
201201

202+
it("should fire onChange event on a SELECT element", () => {
203+
const onChangeHandler = jest.fn();
204+
205+
const { getByTestId } = render(
206+
<select data-testid="element" onChange={onChangeHandler}>
207+
<option data-testid="val1" value="1">
208+
1
209+
</option>
210+
<option data-testid="val2" value="2">
211+
2
212+
</option>
213+
<option data-testid="val3" value="3">
214+
3
215+
</option>
216+
</select>);
217+
218+
userEvent.selectOptions(getByTestId("element"), "2");
219+
220+
expect(onChangeHandler).toBeCalled();
221+
});
222+
202223
it("sets the selected prop on the selected OPTION using nested SELECT", () => {
203224
const onSubmit = jest.fn();
204225

src/index.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ function dblClickCheckbox(checkbox) {
7979
fireEvent.click(checkbox);
8080
}
8181

82-
function selectOption(option) {
82+
function selectOption(select, option) {
8383
fireEvent.mouseOver(option);
8484
fireEvent.mouseMove(option);
8585
fireEvent.mouseDown(option);
@@ -88,6 +88,8 @@ function selectOption(option) {
8888
fireEvent.click(option);
8989

9090
option.selected = true;
91+
92+
fireEvent.change(select);
9193
}
9294

9395
function fireChangeEvent(event) {
@@ -162,9 +164,9 @@ const userEvent = {
162164

163165
if (selectedOptions.length > 0) {
164166
if (element.multiple) {
165-
selectedOptions.forEach(option => selectOption(option));
167+
selectedOptions.forEach(option => selectOption(element, option));
166168
} else {
167-
selectOption(selectedOptions[0]);
169+
selectOption(element, selectedOptions[0]);
168170
}
169171
}
170172

0 commit comments

Comments
 (0)