首页 > 其他 > 详细

[React Testing] Test React Portals with within from React Testing Library

时间:2020-05-04 09:49:35      阅读:59      评论:0      收藏:0      [点我收藏+]

When you use a React Portal, much of your component can be rendered outside the main DOM tree. Let’s see how we can use utilities provided by React Testing Library to allow us to select elements within the portal. To perform actions and assert on what’s rendered.

 

Component:

import React from react
import ReactDOM from react-dom

let modalRoot = document.getElementById(modal-root)
if (!modalRoot) {
  modalRoot = document.createElement(div)
  modalRoot.setAttribute(‘id‘, ‘modal-root‘)
  document.body.appendChild(modalRoot)
}

// don‘t use this for your modals.
// you need to think about accessibility and styling.
// Look into: https://ui.reach.tech/dialog
function Modal({ children }) {
  const el = React.useRef(document.createElement(div))
  React.useLayoutEffect(() => {
    const currentEl = el.current
    modalRoot.appendChild(currentEl)
    return () => modalRoot.removeChild(currentEl)
  }, [])
  return ReactDOM.createPortal(children, el.current)
}

export { Modal }

 

Testing:

import React from react
import { render, within } from @testing-library/react
import { Modal } from ../extra/modal
import @testing-library/jest-dom/extend-expect

test(modal shows the children, () => {
  render(
    <Modal>
      <div data-testid="test" />
    </Modal>,
  )

  // get element only in modal-root
  const { getByTestId } = within(document.getElementById(‘modal-root‘))
  expect(getByTestId(test)).toBeInTheDocument()
})

 

[React Testing] Test React Portals with within from React Testing Library

原文:https://www.cnblogs.com/Answer1215/p/12825053.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!