zoukankan      html  css  js  c++  java
  • [React Testing] Test your Custom Hook Module with react-hooks-testing-library

    It's always important to test your code, especially if you're open-sourcing it for others to use. In this video, we'll learn how to use react-hooks-testing-library to write a few tests for our custom hook.

    import { useState, useEffect } from 'react'
    
    export function useStarWarsQuote() {
      const [quote, setQuote] = useState('')
      const [loading, setLoading] = useState(false)
    
      useEffect(() => {
        async function getStarWarsQuote() {
          setLoading(true)
          // Get initial text
          const response = await fetch(
            'https://starwars-quote-proxy-gi0d3x1lz.now.sh/api/randomQuote'
          )
          const data = await response.json()
          const quote = data.starWarsQuote
          setQuote(quote)
          setLoading(false)
        }
        getStarWarsQuote()
      }, [])
    
      return { quote, loading }
    }

    Test:

    import { renderHook } from '@testing-library/react-hooks'
    import { useStarWarsQuote } from './'
    
    describe('useStarWarsQuote', () => {
      test('should return an object with the keys: loading, quote', () => {
        // result.current = the value returned by our hook
        const { result } = renderHook(() => useStarWarsQuote())
    
        expect(result.current).toHaveProperty('loading')
        expect(result.current).toHaveProperty('quote')
      })
    
      test('should set loading to true after initial call', () => {
        const { result } = renderHook(() => useStarWarsQuote())
        expect(result.current.loading).toBe(true)
      })
    
      test('should return a quote and set loading to false', async () => {
        // Add test here
        const { result, waitForNextUpdate } = renderHook(() => useStarWarsQuote())
    
    
        await waitForNextUpdate()
        expect(typeof result.current.quote).toBe('string')
        expect(result.current.quote).not.toBe(null)
        expect(result.current.quote).not.toBe('')
        expect(result.current.loading).toBe(false)
      })
    })
  • 相关阅读:
    C语言程序设计第5堂作业
    C语言程序设计第4堂作业
    gets和fgets函数的区别
    编写一个程序实现strcpy函数的功能
    编写一个程序实现strcmp函数的功能
    编写一个程序实现strcat函数的功能
    11-1. 通讯录的录入与显示(10)
    11-0. 平面向量加法(10)
    10-4. 字符串循环左移(20)
    10-3. 字符串逆序(15)
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12827669.html
Copyright © 2011-2022 走看看