Closed6
window.location.reloadをモックしてテストコードを書きたい
こんな感じでモックできないか?
it('...', () => {
...
const mockReload = jest.fn()
Object.defineProperty(window.location, 'reload', {
configurable: true,
value: mockReload,
})
...
expect(mockReload).toHaveBeenCalled()
})
このエラーが出た。
TypeError: Cannot redefine property: reload
at Function.defineProperty (<anonymous>)
spyOn
を使ってできないか?
const mockReload = jest
.spyOn(global.location, 'reload')
.mockImplementation(() => {})
エラーが出た。
TypeError: Cannot assign to read only property 'reload' of object '[object Location]'
これならどうだろう?
it('...', () => {
const mockReload = jest.fn()
// 元のlocationを退避
const { location } = window
// locationをdelete
delete (window as any).location // 「'delete' 演算子のオペランドはオプションである必要があります。ts(2790)」というエラーが出るので、as anyをかましている
// reload関数をモック
window.location = { ...location, reload: mockReload }
...
expect(mockReload).toHaveBeenCalled()
// 元のlocationに戻す
window.location = location
})
通った!🎉
このスクラップは2023/09/13にクローズされました