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

csa*_*anh 22 jasmine testbed angular

我是Angular 2测试的新手.我试图弄清楚在测试级别使用testsbed.get()和使用有什么区别inject.

例如:

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

    const testbed = getTestBed();
    someService= testbed.get(SomeService);
  });
});
Run Code Online (Sandbox Code Playgroud)

VS

it('test service', inject([SomeService], (someService: SomeService) => {
Run Code Online (Sandbox Code Playgroud)

Tom*_*her 33

只需添加到现有的答案,如果你像我一样发现了这个问题,因为你想知道有什么区别之间TestBed.get()TestBed.inject()我知道不太什么OP最初问,但它是相关的,有很大关系。

根据最新的 Angular 文档,我认为值得发布该文档,TestBed.inject()该文档是TestBed.get().

TestBed可以在此处找到有关 Angular 的文档。

在此处输入图片说明

  • Angular v9 中引入了“TestBed.inject”,同时“TestBed.get”已被弃用。 (3认同)

Est*_*ask 25

inject自从AngularJS作为直接喷射器调用的替代方案以来,辅助函数在历史上被使用.在Angular 1中,有必要引导测试ngMock.它在Angular 2及更高版本中是完全可选的,并且只是TestBed测试中DI的建议方式.

它是一个方便的包装器testBed.get,允许避免多次testBed.get调用,类似于:

const [foo, bar] = [Foo, Bar].map(TestBed.get);
Run Code Online (Sandbox Code Playgroud)

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