dmi*_*er1 7 react-modal react-testing-library
我正在尝试使用 React 测试库和 findByRole 来测试我的模式是否存在。我不断收到一条错误消息:Unable to find role="dialog"
尽管我可以清楚地看到它在测试控制台中打印出来。
这是我的测试:
\nimport React from "react";\nimport {\n render,\n screen,\n within,\n fireEvent, cleanup, waitFor\n} from \'@testing-library/react\';\nimport \'@testing-library/jest-dom\';\nimport "@testing-library/react/dont-cleanup-after-each";\nimport Modal from \'react-modal\';\n\nimport PackagerModal from \'./PackagerModal\';\n\nconst mockedEmptyFn = jest.fn();\n\nconst mockBaseProps = {\n openPackager: true,\n setOpenPackager: mockedEmptyFn,\n activeOrder: {\n // ... // lots of irrelevant properties here\n ]\n },\n setOrders: mockedEmptyFn,\n customStyles: {\n content: {\n backgroundColor: "var(--color-primary)",\n border: "1px solid #ccc",\n boxShadow: "-2rem 2rem 2rem rgba(0, 0, 0, 0.5)",\n color: "rgba(var(--RGB-text), 0.8)",\n filter: "blur(0)",\n fontSize: "1.1em",\n fontWeight: "bold",\n margin: "50px auto",\n opacity: 1,\n outline: 0,\n position: "relative",\n visibility: "visible",\n width: "500px"\n },\n overlay: {\n backgroundColor: "rgba(255, 255, 255, 0.9)"\n }\n },\n readOnly: false,\n setReadOnly: mockedEmptyFn,\n};\n\nModal.setAppElement(\'body\');\n\n\nconst Component = (props) => <PackagerModal {...mockBaseProps} {...props} />\n\ndescribe(\'Packager Modal tests with editable inputs\', () => {\n afterAll(() => {\n cleanup();\n });\n\n\n test(\'Should show packager modal\', async () => {\n render(\n <Component/>\n );\n // screen.debug();\n const modalWindow = await screen.findByRole(\'dialog\');\n expect(modalWindow).toBeInTheDocument();\n });\n});\n
Run Code Online (Sandbox Code Playgroud)\n这是我的模式:
\nimport ReactModal from \'react-modal\';\nimport React, { useEffect, useRef, useState } from \'react\';\nimport CloseButton from \'./CloseButton\';\nimport PropTypes from \'prop-types\';\n\nconst PackagerModal = (props) => {\n const {\n openPackager,\n setOpenPackager,\n activeOrder,\n setOrders,\n customStyles,\n readOnly,\n setReadOnly,\n } = props;\n\n const cleanUpModal = () => {\n setReadOnly(false);\n setUserInput(initialState);\n };\n\n return (\n <ReactModal\n isOpen={openPackager}\n style={customStyles}\n className={\'order-details-modal\'}\n closeTimeoutMS={1000}\n onAfterClose={cleanUpModal}\n >\n <CloseButton setOpenModal={setOpenPackager} />\n <h2 className={\'title\'}>Packager Order Checklist</h2>\n </ReactModal>\n );\n};\n\nPackagerModal.propTypes = {\n openPackager: PropTypes.bool.isRequired,\n setOpenPackager: PropTypes.func.isRequired,\n customStyles: PropTypes.object.isRequired,\n activeOrder: PropTypes.object.isRequired,\n setOrders: PropTypes.func.isRequired,\n readOnly: PropTypes.bool.isRequired,\n setReadOnly: PropTypes.func.isRequired,\n};\n\nexport default PackagerModal;\n
Run Code Online (Sandbox Code Playgroud)\n最后,这是我在测试控制台中看到的一些输出:
\n \xe2\x97\x8f Packager Modal tests with editable inputs \xe2\x80\xba Should show packager modal\n\n Unable to find role="dialog"\n\n Ignored nodes: comments, script, style\n <body\n aria-hidden="true"\n class="ReactModal__Body--open"\n >\n <div\n data-react-modal-body-trap=""\n style="position: absolute; opacity: 0;"\n tabindex="0"\n />\n <div />\n <div\n data-react-modal-body-trap=""\n style="position: absolute; opacity: 0;"\n tabindex="0"\n />\n <div\n class="ReactModalPortal"\n >\n <div\n class="ReactModal__Overlay ReactModal__Overlay--after-open"\n style="position: fixed; top: 0px; left: 0px; right: 0px; bottom: 0px; background-color: rgba(255, 255, 255, 0.9);"\n >\n <div\n aria-modal="true"\n class="ReactModal__Content ReactModal__Content--after-open order-details-modal"\n role="dialog"\n style="border: 1px solid #ccc; box-shadow: -2rem 2rem 2rem rgba(0, 0, 0, 0.5); filter: blur(0); font-size: 1.1em; font-weight: bold; margin: 50px auto; opacity: 1; outline: 0; position: relative; visibility: visible; width: 500px;"\n tabindex="-1"\n >\n ...\n
Run Code Online (Sandbox Code Playgroud)\n
看起来你的测试主体被设置为隐藏 - aria-hidden="true"
(不知道为什么,因为我不熟悉这个包)。React 测试库非常注重可访问性,因此默认情况下它会忽略任何不可访问的元素。
{ hidden: true }
尝试使用选项查询您的元素
const myModal = getByRole('dialog', { hidden: true });
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5249 次 |
最近记录: |