angular - Angular 单元测试中 Testbed.inject(serviceName) 和 fixture.debugElement.injector.get(serviceName) 的区别

标签 angular unit-testing karma-jasmine

我正在浏览我的团队成员编写的测试用例。我观察到的是在他们使用过的一些地方 TestBed.inject(serviceName) 用于注入(inject)服务,并在某些地方使用了 fixture.debugElement.injector.get(serviceName) .有人能告诉我这两者的区别吗?另外注入(inject)服务的正确方法是什么?
例如:
让 abc: ABCService
技术1:abc = TestBed.inject(ABCService)
技术2:abc = fixture.debugElement.injector.get(ABCSerice)
提前致谢

最佳答案

我认为它们本质上是一回事。我只用 Technique 1 .
在旧版本的 Angular 中,它是 TestBed.get但现在是 TestBed.inject .
我想TestBed.inject从根注入(inject)器获取服务,同时 fixture.debugElement.injector.get获取实际注入(inject)组件的服务。
您可以阅读更多相关信息 here .
您可以在 Component 中提供服务Component 的装饰者并且此服务的每个实例都是唯一的(一个单独的实例),我敢打赌 fixture.debugElement.inject.get将获得装饰器中提供的这个唯一实例,而不是全局单例。查看装饰器中的提供者 here .

关于angular - Angular 单元测试中 Testbed.inject(serviceName) 和 fixture.debugElement.injector.get(serviceName) 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67718077/

相关文章:

angular - karma测试时如何打印log

javascript - 如何在不使用 Angular Material 中的绝对位置的情况下将 mat-list-items 推到底部?

javascript - 回调函数的 mocha-phantomjs 测试用例

javascript - 如何使用 Jasmine 检查对象是否包含项目

Angular 单元测试输入值

javascript - 如何从angular2中输入的文本动态设置超链接并使其可通过url点击?

unit-testing - Grails使用Spring Security Core插件测试用户角色自定义验证约束

c# - 如何调试这个或可能的原因? Moq.Verify 上的用户代码未处理 System.NullReferenceException

javascript - 如何避免无用的else block 语句来增加单元测试用例中的分支覆盖率?

javascript - Angular 2 的 Jasmine 测试用例 - 导航到其他页面