有時候要測的 component 會渲染出時間的內容,因為會變來變去的,對 snapshot 很不利。
但也會有躲不掉的狀況,這時候就要 mock new Date()
這個問題卡我一陣,最後在 這裡 找到答案,可以看見,裡面很多 extends Date class 的示範:
const mockDate = new Date('2018,5,26')
global.Date = class extends Date {
constructor() {
return mockDate
}
}
constructor() {
return mockDate
}
}
在本機跑完美運作,原本內容浮動的 now Date() 完美被模擬成 2018/5/26
但因為我在 Bitbucket 上也有跑測試,就失敗了。
- mindate="Sat May 26 2018 00:00:00 GMT+0800 (台北標準時間)"
- modelvalue="Sat May 26 2018 00:00:00 GMT+0800 (台北標準時間)"
+ mindate="Sat May 26 2018 00:00:00 GMT+0000 (Coordinated Universal Time)"
+ modelvalue="Sat May 26 2018 00:00:00 GMT+0000 (Coordinated Universal Time)"
因為本機的時間跟 Bitbucket 環境不同的關係。
於是我加了這一行 mockDate.toString = jest.fn().mockReturnValue('mock date'),把mockDate 這個物件的 toString 整個 mock 掉。
生成的快照變成
mindate="mock date"
modelvalue="mock date"
完整代碼如下:
const mockDate = new Date('2018,5,26')
mockDate.toString = jest.fn().mockReturnValue('mock date')
mockDate.toString = jest.fn().mockReturnValue('mock date')
config.global.components = { Button }
global.Date = class extends Date {
constructor() {
return mockDate
}
}
global.Date = class extends Date {
constructor() {
return mockDate
}
}
留言
張貼留言