先講解第一種最常見的方法吧~
首先我們要模擬LocalStorage做一個假的LocalStorageMock:
LocalStorageMock主要有五個東西
- 存儲空間store,這邊我們用
Record來寫他的型別,Record<K,T>可以紀錄所有物件裡key與value的型別,K是key的型別,T是value的型別
- getItem: 給予
key取得store裡的value
- setItem: 將資料存取進
store中,value是unknown但是最終會存進去string,所以我寫as known as string
- remove: 給予
key取得store裡的value,雖然我們這次不會用到,但是最好還是把所有實際上可能會用到的功能寫上去
- clear: 清除
store
接下來我們要把這個假的
LocalStorageMock替代window裡的真的localStorage這邊我們用到兩個新的東西,
beforeEach、beforeAllbeforeAll:所在區域內會第一個執行。
beforeEach:每一次的測試前會先執行。
順便補充另外兩個
afterAll:所在區域內最後一個執行。
afterEach:每一次的測試後會馬上執行。
區域是指如果放在describe 裡面,像
block scope一樣,describe裡面就是區域每一次測試是指
it或test (雖然我們沒用到test,但他其實跟it差不多)接下來我們要寫測試了
- 測試沒有資料時我們初始值有被設定進localStorage並且取得到
- 能夠接受他是callback function
- 能夠接受是array
- 如果一開始LocalStorage就有存取資料則使用存取資料當預設值
- 可以設定新資料
- 可以用callback function 設定新資料
當我們寫完之後,就會發現test發生錯誤拉

這就是為什麼我們要寫測試拉究竟是為什麼呢,就留給明天再說吧,自己也可以練習看看喔
如果自己寫完全沒有出錯的人,代表你很棒喔,測試就是為了怕在寫function時遇到沒預期的錯誤
今天的完整程式碼
抱歉今天這麼晚才出產,最近工作有點忙,我應該先提前存好文章的🥲

