如何在 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
一起使用。
我正在 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
一起使用。