在Angular 2/Jasmine测试中,testbed.get和inject之间有什么区别?
我是角度2测试的新手。我试图找出在测试级别使用在Angular 2/Jasmine测试中,testbed.get和inject之间有什么区别?,angular,jasmine,testbed,Angular,Jasmine,Testbed,我是角度2测试的新手。我试图找出在测试级别使用testsbed.get()和仅仅使用inject的区别 例如: vs injecthelper函数自AngularJS作为直接注入器调用的替代方法以来一直被使用。在Angular 1中,有必要使用ngMock引导测试。在Angular 2及更高版本中,它是完全可选的,并且只是测试台测试中DI的一种建议方法 这允许避免多个测试床。get调用,类似于: const [foo, bar] = [Foo, Bar].map(TestBed.get); 其
testsbed.get()
和仅仅使用inject
的区别
例如:
vs
inject
helper函数自AngularJS作为直接注入器调用的替代方法以来一直被使用。在Angular 1中,有必要使用ngMock
引导测试。在Angular 2及更高版本中,它是完全可选的,并且只是测试台测试中DI的一种建议方法
这允许避免多个测试床。get
调用,类似于:
const [foo, bar] = [Foo, Bar].map(TestBed.get);
其他助手函数可以选择性地与
inject
结合使用,即async
和fakeAsync
只是为了添加到现有的答案中,如果像我一样,您发现这个问题是因为您想知道TestBed.get()
和TestBed.inject()之间的区别
据我所知,这与OP最初提出的问题并不完全相同,但它是相关的,而且非常相关
我认为值得一提的是,根据最新的Angular文档,TestBed.inject()
是TestBed.get()
的类型安全替代品
从试验台上的角度文档中可以找到
这些使用方法是等效的,但在Angular 9中,首选方法已更新。
TestBed.get()
在Angular 9+中被弃用,而TestBed.inject()
现在是插入依赖项的首选类型安全方式
为清晰起见,请阅读文档:和。这是一个不赞成的改变。我为你的标签和标题添加了茉莉花。因为这是这个问题所涉及的关键技术。我没有完整的答案,但要挖掘代码:inject
callstestbed.get
。主要区别在于,如果向inject
提供AsyncTestCompleter
,它将运行compileComponents
,并且提供的对象具有完成异步测试执行的done
函数。看起来这是旧代码,最好使用async(inject(
取而代之。从这一点看,这似乎是一个语法首选项问题。v4/v2@BrunoLM AsyncTestCompleter已在内部使用。最终用户不关心这一点,它使inject高效地与testBed一样。gettestBed.inject
在Angular v9中引入,同时testBed.get
被弃用。
it('test service', inject([SomeService], (someService: SomeService) => {
const [foo, bar] = [Foo, Bar].map(TestBed.get);