import { afterEach, describe, expect, it, vi } from 'vitest'; const errorSpy = vi.fn(); const infoSpy = vi.fn(); const ofetchMock = vi.fn(); const setupMocks = () => { vi.resetModules(); vi.doMock('@/utils/logger', () => ({ default: { error: errorSpy, info: infoSpy, }, })); vi.doMock('ofetch', () => ({ ofetch: ofetchMock, })); }; afterEach(() => { vi.clearAllMocks(); vi.unmock('@/utils/logger'); vi.unmock('ofetch'); ofetchMock.mockReset(); }); describe('config remote errors', () => { it('logs when remote config returns empty', async () => { process.env.REMOTE_CONFIG = 'http://rsshub.test/empty'; setupMocks(); ofetchMock.mockResolvedValueOnce(null); await import('@/config'); await vi.waitFor(() => { expect(errorSpy).toHaveBeenCalledWith('Remote config load failed.'); }); delete process.env.REMOTE_CONFIG; }); it('logs when remote config throws', async () => { process.env.REMOTE_CONFIG = 'http://rsshub.test/fail'; const error = new Error('boom'); setupMocks(); ofetchMock.mockRejectedValueOnce(error); await import('@/config'); await vi.waitFor(() => { expect(errorSpy).toHaveBeenCalledWith('Remote config load failed.', error); }); delete process.env.REMOTE_CONFIG; }); });