首页 > 解决方案 > 如何在 Angular 单元测试中重用 Mock 依赖项?

问题描述

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

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 
    },
  ],
  }),
}
}

标签: angularunit-testingkarma-jasmineangular-unit-testtestbed

解决方案


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

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

只需将其导入component.spec文件并与useClass.


推荐阅读