angular - 如何在 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
},
],
}),
}
}
解决方案
是的你可以。不要@Injectable
用于MockServices
. 只需创建一个stub
文件夹并在该文件夹内创建所有 MockServices ( first.service.stub.ts
)。确保export
所有 Mock 服务。
export class MockFirstService {
show() { };
hide() { };
}
只需将其导入component.spec
文件并与useClass
.
推荐阅读
- ubuntu - 在 Ubuntu 18.04 上的 Python 3.7 上安装 wxPython
- html - 根据屏幕大小更改 CSS
- java - 在sqlite java中转义单引号字符串
- c# - 如何为 Azure Blob 存储中的文件夹生成共享访问签名?
- javascript - 单击时如何获取数据表中的特定数据值-VueJS?
- javascript - 用momentjs在几天内获得一个过滤器数组
- ios - 您可以通过 Apple 的 Photokit/API 以编程方式将照片隐藏在 iOS 的照片应用程序的隐藏文件夹中吗(或者我是否坚持必须手动操作)
- typescript - 键入类的动态映射
- javascript - then 使用递归承诺循环
- java - 我如何计算一个单词在字符串数组中出现了多少次,无论它是否大写?