iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Modern Web

我不會測試,所以寫Jest與React Testing Library系列 第 14

Day 14 來看一下hook是如何測試的 初階版

今天來講講如何來測試hook的原始版本

來,我們來先做一個超簡單的hook就叫useName吧

import { useState } from 'react';

export const useChangeName = () => {
  const [name, setName] = useState<string>('stan');

  const setFullName = () => {
    setName('stanmaomao');
  };

  return { name, setFullName };
};

看吧 很簡單,就是export 一個name跟一個set的function,這時候我們測試的原始碼怎樣寫呢!!!

這部分我就簡單講解一下,我們寫一個test case,然後建立變數,來取得之後更新得值,我們寫一個Component的function來render,因為hook只能在functional component,所以用一個外層的變數result來取得hook回傳的值,其中act的函數是非同步的互動更新,因此setState的部分要包在act裡面來達到非同步的更新.

import { render, act } from '@testing-library/react';
import { useChangeName } from '@hooks/useName';

test.only('useName', () => {
  let result: any = {};
  function Component() {
    result = useChangeName();
    return null;
  }
  render(<Component />);
  expect(result.name).toBe('stan');
  act(() => {
    result.setFullName();
  });
  expect(result.name).toBe('stanmaomao');
});

明天會來講進階版renderHook的功能.

ref: kentc相關的文章與程式


上一篇
Day 13 MSW的return Error Type
下一篇
Day 15 使用renderHook
系列文
我不會測試,所以寫Jest與React Testing Library30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言