如何在 Angular 单元测试中重用 Mock 依赖项?

How to reuse Mock dependencies in Angular Unit Test?

我正在 Angular 中编写单元测试,我在所有规范中重复模拟我们所有的服务,TestBed.configureTestingModule 在所有规范文件中都有相同的代码。是否可以将此 TestBed.configureTestingModule 和模拟依赖项移动到某个公共文件,并且可以 inject/use 我们想要的任何地方?

describe(()=>{
 @Injectable({ providedIn: 'root' })
 class MockFirstService {
 constructor() { };
 show() { };
 hide() { }; 
 }
@Injectable({ providedIn: 'root' })
class MockSecondWebApiService extends ApiBaseService {
constructor(http: HttpClient
  , blockUI: BlockUIService
) {
  super(http, blockUI, cache, { baseUrl: baseUrl });
}
}
  beforeEach(()=>{
 TestBed.configureTestingModule({
  imports: [RouterTestingModule, HttpClientTestingModule],
  providers: [
    Injector,
    ApplicationRef,
    CacheService,
    LocalStorageProvider,
    {
      provide: FirstService ,
      useClass: MockFirstService 
    },
    
    {
      provide: SecondWebApiService ,
      useClass: MockSecondWebApiService 
    },
  ],
  }),
}
}

是的,你可以。不要将 @Injectable 用于 MockServices 。只需创建一个 stub 文件夹并在其中创建所有 MockServices (first.service.stub.ts) folder.Make 确保 export 所有 Mock 服务。

export class MockFirstService {
   show() { };
   hide() { }; 
}

只需将其导入 component.spec 文件并与 useClass 一起使用。