码迷,mamicode.com
首页 > 其他好文 > 详细

[React Testing] Test your Custom Hook Module with react-hooks-testing-library

时间:2020-05-04 19:40:17      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:on()   lse   video   write   async   type   res   test   after   

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)
  })
})

 

[React Testing] Test your Custom Hook Module with react-hooks-testing-library

标签:on()   lse   video   write   async   type   res   test   after   

原文地址:https://www.cnblogs.com/Answer1215/p/12827669.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!