44 lines
1.0 KiB
TypeScript
44 lines
1.0 KiB
TypeScript
|
|
import { act, renderHook } from '@testing-library/react'
|
||
|
|
import { beforeEach, describe, expect, it } from 'vitest'
|
||
|
|
import { useNetworkStatus } from './useNetworkStatus'
|
||
|
|
|
||
|
|
describe('useNetworkStatus', () => {
|
||
|
|
let online = true
|
||
|
|
|
||
|
|
beforeEach(() => {
|
||
|
|
online = true
|
||
|
|
Object.defineProperty(window.navigator, 'onLine', {
|
||
|
|
configurable: true,
|
||
|
|
get: () => online,
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
it('uses navigator.onLine for the initial state', () => {
|
||
|
|
online = false
|
||
|
|
|
||
|
|
const { result } = renderHook(() => useNetworkStatus())
|
||
|
|
|
||
|
|
expect(result.current.isOffline).toBe(true)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('updates when online and offline events fire', () => {
|
||
|
|
const { result } = renderHook(() => useNetworkStatus())
|
||
|
|
|
||
|
|
expect(result.current.isOffline).toBe(false)
|
||
|
|
|
||
|
|
act(() => {
|
||
|
|
online = false
|
||
|
|
window.dispatchEvent(new Event('offline'))
|
||
|
|
})
|
||
|
|
|
||
|
|
expect(result.current.isOffline).toBe(true)
|
||
|
|
|
||
|
|
act(() => {
|
||
|
|
online = true
|
||
|
|
window.dispatchEvent(new Event('online'))
|
||
|
|
})
|
||
|
|
|
||
|
|
expect(result.current.isOffline).toBe(false)
|
||
|
|
})
|
||
|
|
})
|