首页 > 其他 > 详细

[React Testing] Test timer related feature in React

时间:2020-05-04 11:18:35      阅读:57      评论:0      收藏:0      [点我收藏+]

Sometimes your react component may need to do some cleanup work in the return value from useEffect or useLayoutEffect, or the componentWillUnmount lifecycle method for class components. Luckily for us, as far as React Testing Library is concerned, whichever of those you use is an implementation detail, so your test looks exactly the same regardless of how you implement it. Check out how you can test that simply with React Testing Library and a <Countdown />component.

 

Component:

import React from react

function Countdown() {
  const [remainingTime, setRemainingTime] = React.useState(10000)
  const end = React.useRef(new Date().getTime() + remainingTime)
  React.useEffect(() => {
    const interval = setInterval(() => {
      const newRemainingTime = end.current - new Date().getTime()
      if (newRemainingTime <= 0) {
        clearInterval(interval)
        setRemainingTime(0)
      } else {
        setRemainingTime(newRemainingTime)
      }
    })
    return () => clearInterval(interval)
  }, [])
  return remainingTime
}

export { Countdown }

 

Testing:

import React from react
import { render, act } from @testing-library/react
import { Countdown } from ../extra/countdown

beforeAll(() => {
  jest.spyOn(console, error).mockImplementation(() => {})
})

afterAll(() => {
  console.error.mockRestore()
})

afterEach(() => {
  jest.clearAllMocks()
  jest.useRealTimers()
})

test(does not attempt to set state when unmounted (to prevent memory leaks), () => {
  jest.useFakeTimers() // similar to fakeAsync
  const { unmount } = render(<Countdown />)
  unmount()
  // act is similar to Angualr flush
  act(() => jest.runOnlyPendingTimers())
  expect(console.error).not.toHaveBeenCalled()
})

 

[React Testing] Test timer related feature in React

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

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