• [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)
      })
    })
  • 相关阅读:
    Action常见注解的运用
    发现越来越喜欢来博客园了,所以自己也注册了一个!
    jsf 繁体教程下载pdf
    poj3210
    poj3224
    poj3219
    poj3233
    poj3372
    Paper Pal:一个中英文论文及其代码大数据搜索平台
    年轻就该多尝试,教你20小时Get一项新技能
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12827669.html
Copyright © 2020-2023  润新知