Semantic-UI-React: TypeError: _this.ref.current.querySelector is not a function
Bug Report
After upgrading to the last version, I have this error in some of our jest tests. Somehow there is a way for querySelector to not be function.
/**
* Encapsulate a semantic form field into a component to use it in redux-form.
*/
const SemanticFormField = ({
input,
type,
label,
htmlLabel,
placeholder,
meta: {touched, error, warning},
pointing,
disabled,
as: As = Input,
width,
fieldClassName,
inline,
autoFocus,
...props
}) => {
const handleChange = (e, {value}) => {
return input.onChange(value)
}
input.disabled = disabled
input["data-testid"] = input.name
return (
<Form.Field
error={!!(touched && error)}
width={width}
className={fieldClassName ? fieldClassName : ""}
inline={inline ? true : false}
>
{htmlLabel}
<As
{...props}
{...input}
value={typeof input.value !== "boolean" ? input.value : undefined}
checked={typeof input.value === "boolean" ? input.value : undefined}
type={type}
label={label}
placeholder={placeholder}
onChange={handleChange}
autoFocus={autoFocus}
/>
{touched &&
((error && (
<Label className="semantic-form-field-label" basic color="red" pointing={pointing}>
{error}
</Label>
)) ||
(warning && (
<Label className="semantic-form-field-label" basic color="orange" pointing={pointing}>
{warning}
</Label>
)))}
</Form.Field>
)
}
A redux form field which use a Semantic Select component
<Field
as={Select}
component={SemanticFormField}
disabled={disabled}
fluid
htmlLabel={<label>{texts.missionInformationsWorkedDaysTypePlaceHolder}</label>}
multiple
name="workedDaysType"
options={workedDaysTypeOptions}
placeholder={texts.missionInformationsWorkedDaysTypePlaceHolder}
validate={required}
/>
Steps
It’s a complex use with redux-form and a generic component we called SemanticFormField to create a bridge between redux-form and SUIR
Expected Result
No TypeError
Actual Result
Error: Uncaught [TypeError: _this.ref.current.querySelector is not a function]
at reportException (/Users/myuser/workspace/folder/project/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js:66:24)
at invokeEventListeners (/Users/myuser/workspace/folder/project/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:209:9)
at HTMLUnknownElementImpl._dispatch (/Users/myuser/workspace/folder/project/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
at HTMLUnknownElementImpl.dispatchEvent (/Users/myuser/workspace/folder/project/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
at HTMLUnknownElementImpl.dispatchEvent (/Users/myuser/workspace/folder/project/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
at HTMLUnknownElement.dispatchEvent (/Users/myuser/workspace/folder/project/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
at Object.invokeGuardedCallbackDev (/Users/myuser/workspace/folder/project/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2424:16)
at invokeGuardedCallback (/Users/myuser/workspace/folder/project/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2477:31)
at commitRoot (/Users/myuser/workspace/folder/project/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:10860:7)
at /Users/myuser/workspace/folder/project/node_modules/react-test-renderer/cjs/react-test-renderer.development.js:12311:5 TypeError: _this.ref.current.querySelector is not a function
at Dropdown._this.scrollSelectedItemIntoView (/Users/myuser/workspace/folder/project/node_modules/semantic-ui-react/dist/commonjs/modules/Dropdown/Dropdown.js:728:36)
at Dropdown.componentDidUpdate (/Users/myuser/workspace/folder/project/node_modules/semantic-ui-react/dist/commonjs/modules/Dropdown/Dropdown.js:1091:12)
Version
SUIR 1.2.1 React 16.8.2 React Test Renderer 16…8.2
Testcase
I can’t manage to create a small test at the moment
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Comments: 22 (10 by maintainers)
In my case - with the latest version (v2.0.0) and workaround proposed in https://github.com/facebook/react/issues/7371#issuecomment-317396864 it does not work (testing components using SUIR’s Dropdown with Jest and Storyshots addon for Storybook).
Still getting similar error as in the first message:
Possibly more sophisticated Jest mocking is necessary?
I was able to simplify it enough: https://codesandbox.io/s/hardcore-saha-cyu79?file=/src/index.spec.js