49

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

例如:

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

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

对比

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

3 回答 3

35

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

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

从 Angular 文档TestBed中可以找到这里

在此处输入图像描述

于 2020-02-21T12:53:43.743 回答
28

inject自 AngularJS 以来,辅助函数一直被用作直接注入器调用的替代方法。在 Angular 1 中,有必要使用ngMock. 它在 Angular 2 及更高版本中完全是可选的,只是在 TestBed 测试中建议的 DI 方式。

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

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

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

于 2017-07-21T04:37:36.060 回答
1

这些过去是等价的,但在 Angular 9 中,首选方法变成了inject()

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

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

于 2021-04-09T21:57:20.990 回答