先講解第一種最常見的方法吧~
首先我們要模擬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
、beforeAll
beforeAll
:所在區域內會第一個執行。
beforeEach
:每一次的測試前會先執行。
順便補充另外兩個
afterAll
:所在區域內最後一個執行。
afterEach
:每一次的測試後會馬上執行。
區域是指如果放在describe 裡面,像
block scope
一樣,describe裡面就是區域每一次測試是指
it
或test
(雖然我們沒用到test
,但他其實跟it
差不多)接下來我們要寫測試了
- 測試沒有資料時我們初始值有被設定進localStorage並且取得到
- 能夠接受他是callback function
- 能夠接受是array
- 如果一開始LocalStorage就有存取資料則使用存取資料當預設值
- 可以設定新資料
- 可以用callback function 設定新資料
當我們寫完之後,就會發現test發生錯誤拉

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