diff --git a/.gitignore b/.gitignore index 82e2584c..2b60d167 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules coverage/ dist/ +.idea/ diff --git a/__tests__/react/selectoptions.js b/__tests__/react/selectoptions.js index e2eb15c9..77122e5e 100644 --- a/__tests__/react/selectoptions.js +++ b/__tests__/react/selectoptions.js @@ -249,4 +249,34 @@ describe("userEvent.selectOptions", () => { expect(getByTestId("val2").selected).toBe(true); expect(getByTestId("val3").selected).toBe(false); }); + + it("sets the selected prop on the selected OPTION using OPTGROUPS", () => { + const { getByTestId } = render( +
+ +
+ ); + + userEvent.selectOptions(getByTestId("element"), ["1", "3"]); + + expect(getByTestId("val1").selected).toBe(true); + expect(getByTestId("val2").selected).toBe(false); + expect(getByTestId("val3").selected).toBe(true); + }); }); diff --git a/__tests__/vue/selectoptions.js b/__tests__/vue/selectoptions.js index 0d178ef8..e6feb767 100644 --- a/__tests__/vue/selectoptions.js +++ b/__tests__/vue/selectoptions.js @@ -226,4 +226,29 @@ describe("userEvent.selectOptions", () => { expect(getByTestId("val2").selected).toBe(true); expect(getByTestId("val3").selected).toBe(false); }); + + it("sets the selected prop on the selected OPTION using OPTGROUPS", () => { + const { getByTestId } = render({ + template: ` +
+ +
` + }); + + userEvent.selectOptions(getByTestId("element"), ["1", "3"]); + + expect(getByTestId("val1").selected).toBe(true); + expect(getByTestId("val2").selected).toBe(false); + expect(getByTestId("val3").selected).toBe(true); + }); }); diff --git a/src/index.js b/src/index.js index 332d0d53..ae9c6f0f 100644 --- a/src/index.js +++ b/src/index.js @@ -169,8 +169,8 @@ const userEvent = { clickElement(element); const valArray = Array.isArray(values) ? values : [values]; - const selectedOptions = Array.from(element.children).filter( - opt => opt.tagName === "OPTION" && valArray.includes(opt.value) + const selectedOptions = Array.from(element.querySelectorAll('option')).filter( + opt => valArray.includes(opt.value) ); if (selectedOptions.length > 0) {