在Angular 2 / Jasmine测试中testbed.get和inject有什么区别?

时间:2017-03-28 20:49:16

标签: angular jasmine testbed

我是Angular 2测试的新手。我想弄清楚使用testsbed.get()并在测试级别使用inject有什么不同。

例如:

beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [SomeService]
    });

    const testbed = getTestBed();
    someService= testbed.get(SomeService);
  });
});

VS

it('test service', inject([SomeService], (someService: SomeService) => {

3 个答案:

答案 0 :(得分:25)

只需添加到现有答案中,如果像我一样,您就发现了这个问题,因为您想知道TestBed.get()TestBed.inject()之间的区别是什么,我知道这与OP最初要求的不完全相同,但是这是非常相关的。

我认为值得一提的是,根据最新的Angular文档,TestBed.inject()TestBed.get()的类型安全替代。

here上的TestBed的Angular文档中获得。

enter image description here

答案 1 :(得分:21)

自从AngularJS作为直接喷射器调用的替代方案以来,历史上使用了

inject辅助函数。在Angular 1中,有必要使用ngMock引导测试。它在Angular 2及更高版本中是完全可选的,并且只是TestBed测试中DI的建议方式。

It a convenience wrapper for testBed.get允许避免多次testBed.get次调用,类似于:

const [foo, bar] = [Foo, Bar].map(TestBed.get);

其他辅助函数可以选择与inject结合使用,即asyncfakeAsync

答案 2 :(得分:0)

这些用法是等效的,但在 Angular 9 中更新了首选方法。

TestBed.get() 在 Angular 9+ 中已弃用,TestBed.inject() 现在是注入依赖项的首选类型安全方式。

为清楚起见,请阅读文档:TestBed.get()TestBed.inject()。更改是弃用之一。