Claude-skill-registry di-mockable-services
Design injectable, mockable services (interfaces + composition root)
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/di-mockable-services" ~/.claude/skills/majiayu000-claude-skill-registry-di-mockable-services && rm -rf "$T"
manifest:
skills/data/di-mockable-services/SKILL.mdsource content
What I do
Je standardise la DI (injection de dépendances) et la conception mockable.
Core rules
- Écrire le contrat d'abord :
,IUserApi
, etc.UserRepository - Les hooks/use-cases dépendent des interfaces.
- Les implémentations concrètes vivent dans
.infra/ - Le seul endroit qui instancie l'infra est le
.composition root
Example (frontend service)
export interface IUserApi { getById(id: string): Promise<UserDTO>; } export class UserApi implements IUserApi { constructor(private readonly http: HttpClient) {} getById(id: string) { return this.http.get(`/users/${id}`); } } export class FakeUserApi implements IUserApi { async getById(id: string) { return { id, name: 'Test' }; } }
Testing guidance
- En test, remplacer via le container :
.container.userApi = new FakeUserApi() - Éviter les mocks globaux non typés.