返回 Skill 列表
extension
分类: 开发与工程无需 API Key

di-mockable-services

设计可注入、可模拟的服务(接口+组合根)

person作者: jakexiaohubgithub

What I do

Je standardise la DI (injection de dépendances) et la conception mockable.

Core rules

  • Écrire le contrat d'abord : IUserApi, UserRepository, etc.
  • 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.