lobehub/.agents/skills/testing/references/electron-ipc-test.md
Innei 346fc4617e
♻️ refactor: migrate AI Rules to Claude Code Skills (#11737)
♻️ refactor: migrate AI Rules to Claude Code Skills system

Migrate all AI Rules from .cursor/rules/ to .agents/skills/ directory:
- Move 23 skills to .agents/skills/ (main directory)
- Update symlinks: .claude/skills, .cursor/skills, .codex/skills
- Create project-overview skill from project documentation
- Add references/ subdirectories for complex skills
- Remove LobeChat references from skill descriptions
- Delete obsolete .cursor/rules/ and .claude/commands/prompts/ directories

Skills structure enables better portability and maintainability across AI tools.
2026-01-23 22:30:18 +08:00

1.8 KiB

Electron IPC Testing Strategy

For Electron IPC tests, use Mock return values instead of real Electron environment.

Basic Mock Setup

import { vi } from 'vitest';
import { electronIpcClient } from '@/server/modules/ElectronIPCClient';

vi.mock('@/server/modules/ElectronIPCClient', () => ({
  electronIpcClient: {
    getFilePathById: vi.fn(),
    deleteFiles: vi.fn(),
  },
}));

Setting Mock Behavior

beforeEach(() => {
  vi.resetAllMocks();
  vi.mocked(electronIpcClient.getFilePathById).mockResolvedValue('/path/to/file.txt');
  vi.mocked(electronIpcClient.deleteFiles).mockResolvedValue({ success: true });
});

Testing Different Scenarios

it('should handle successful file deletion', async () => {
  vi.mocked(electronIpcClient.deleteFiles).mockResolvedValue({ success: true });

  const result = await service.deleteFiles(['desktop://file1.txt']);

  expect(electronIpcClient.deleteFiles).toHaveBeenCalledWith(['desktop://file1.txt']);
  expect(result.success).toBe(true);
});

it('should handle file deletion failure', async () => {
  vi.mocked(electronIpcClient.deleteFiles).mockRejectedValue(new Error('Delete failed'));

  const result = await service.deleteFiles(['desktop://file1.txt']);

  expect(result.success).toBe(false);
  expect(result.errors).toBeDefined();
});

Advantages

  1. Environment simplification: No complex Electron setup
  2. Controlled testing: Precise control over IPC return values
  3. Scenario coverage: Easy to test success/failure cases
  4. Speed: Mock calls are faster than real IPC

Notes

  • Ensure mock behavior matches real IPC interface
  • Use vi.mocked() for type safety
  • Reset mocks in beforeEach to avoid test interference
  • Verify both return values and that IPC methods were called correctly