angular - Angular 9 TestBed.inject 和提供者覆盖
问题描述
既然 TestBed.get 在 Angular 9 中已被弃用,那么当使用提供者覆盖时,以下替代方案是什么
TestBed.configureTestingModule({
providers: [{ provide: MyClass, useClass: MyStub}]
});
const obj : MyStub = TestBed.get(MyClass);
真的是这样还是有更好的方法?
const obj : MyStub = TestBed.inject(MyClass) as unknown as MyStub;
解决方案
出于所有意图和目的,您MyStub
至少应该是 Partial 或扩展它尝试模拟的类的类,否则您的测试有点“错误”,所以如果是这种情况,您可以这样做:
const obj = TestBed.inject(MyClass);
如果你的存根上有不同的属性或不同的函数签名,你也可以这样做:
const obj = TestBed.inject<MyStub>(MyClass as any);
但一般来说,您的模拟应该(部分)与其模拟的东西共享相同的签名,这也意味着不需要强制转换
推荐阅读
- python - Python列表理解:用两个变量填充每个内部列表
- .net - 构建服务器中的 Gitlab msbuild 问题 - 无法解决此参考。找不到程序集
- node.js - 从 Node.js 中的 AWS Lambda 函数返回的正确方法是什么?
- javascript - 如何用javascript下载文件?
- iis - xRM-Portals 加密操作错误 - settings.xml 已损坏
- javascript - 用 JS 调用用户定义的 jQuery 函数
- javascript - 如何在复杂错误/警告上使包裹/babel/typescript proccess 失败?
- python - ALBV2 登录 s3 存储桶并使用对流层启用删除保护
- httpbuilder - 如何从http ng-builder中提取响应为json
- python - 为什么 re.sub 在这个 python2 案例中不起作用?