• [React Testing] Test timer related feature in React


    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()
    })
  • 相关阅读:
    推荐一些学习软件编程的网站
    Git总结笔记2-克隆远程仓库到本地
    Git总结笔记3-把本地仓库推送到github
    Git总结笔记1-搭建和使用30条简明笔记
    【师兄笔记】Java记录生活
    【师兄笔记】Java入门
    学习软件技术的那些事?
    Java编程基础
    献给还不知道怎么坚持的你
    GIT 检查、撤销修改简明教程
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12825014.html
Copyright © 2020-2023  润新知