42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import { renderHook, waitFor } from '@testing-library/react';
|
|
import { describe, expect, test, vi, beforeEach } from 'vitest';
|
|
|
|
const setupHook = async () => {
|
|
const module = await import('../src/hooks/useServiceWorker');
|
|
return module.useServiceWorker;
|
|
};
|
|
|
|
describe('useServiceWorker', () => {
|
|
beforeEach(() => {
|
|
vi.resetModules();
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
test('registers service worker successfully', async () => {
|
|
const register = vi.fn().mockResolvedValue({});
|
|
Object.defineProperty(navigator, 'serviceWorker', {
|
|
value: { register },
|
|
configurable: true,
|
|
});
|
|
|
|
const useServiceWorker = await setupHook();
|
|
const { result } = renderHook(() => useServiceWorker());
|
|
|
|
await waitFor(() => expect(result.current).toBe(true));
|
|
expect(register).toHaveBeenCalledWith('/service-worker.js');
|
|
});
|
|
|
|
test('handles registration failure', async () => {
|
|
const register = vi.fn().mockRejectedValue(new Error('fail'));
|
|
Object.defineProperty(navigator, 'serviceWorker', {
|
|
value: { register },
|
|
configurable: true,
|
|
});
|
|
|
|
const useServiceWorker = await setupHook();
|
|
const { result } = renderHook(() => useServiceWorker());
|
|
|
|
await waitFor(() => expect(result.current).toBe(false));
|
|
});
|
|
});
|