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)

Most upvoted comments

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:

    TypeError: _this.ref.current.querySelector is not a function

      at Dropdown._this.scrollSelectedItemIntoView (node_modules/semantic-ui-react/dist/commonjs/modules/Dropdown/Dropdown.js:728:36)
      at Dropdown.componentDidUpdate (node_modules/semantic-ui-react/dist/commonjs/modules/Dropdown/Dropdown.js:1091:12)
      at commitLifeCycles (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:12094:22)
      at commitLayoutEffects (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15276:7)
      at HTMLUnknownElement.callCallback (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11616:14)
      at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:193:27)
      at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9)
      at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17)
      at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27)
      at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21)
      at Object.invokeGuardedCallbackDev (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11665:16)
      at invokeGuardedCallback (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:11718:31)
      at commitRootImpl (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:15012:9)
      at unstable_runWithPriority (node_modules/scheduler/cjs/scheduler.development.js:815:12)
      at runWithPriority (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2038:10)
      at commitRoot (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14853:3)
      at finishSyncRender (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14346:5)
      at performSyncWorkOnRoot (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:14318:9)
      at node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2088:24
      at unstable_runWithPriority (node_modules/scheduler/cjs/scheduler.development.js:815:12)
      at runWithPriority (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2038:10)
      at flushSyncCallbackQueueImpl (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2083:7)
      at flushSyncCallbackQueue (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:2071:3)
      at scheduleUpdateOnFiber (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:13696:9)
      at scheduleRootUpdate (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16931:3)
      at updateContainerAtExpirationTime (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16959:10)
      at updateContainer (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:16979:10)
      at create (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:17722:5)
      at getRenderedTree (node_modules/@storybook/addon-storyshots/dist/frameworks/react/renderTree.js:23:16)
      at node_modules/@storybook/addon-storyshots/dist/test-bodies.js:10:22
      at Object.<anonymous> (node_modules/@storybook/addon-storyshots/dist/api/snapshotsTestsTemplate.js:42:20)

Possibly more sophisticated Jest mocking is necessary?