What is the difference between testbed.get and inject in Angular 2/Jasmine testing?

AngularJasmineTestbed

Angular Problem Overview


I am new to Angular 2 testing. I am trying to figure out what is the difference in using testsbed.get() and just using inject at the test level.

eg:

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

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

vs

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

Angular Solutions


Solution 1 - Angular

Just to add to the existing answer and if like me you found this question because you are wondering what the difference is between TestBed.get() and TestBed.inject() which I know was not quite what the OP originally asked but it is relevant and is very much related.

I thought it was worth posting that according to the latest Angular documentation that TestBed.inject() is the type safe replacement of TestBed.get().

From the Angular documentation on TestBed that can be found here.

enter image description here

Solution 2 - Angular

inject helper function was historically used since AngularJS as an alternative to direct injector calls. In Angular 1, it was necessary to bootstrap a test with ngMock. It is entirely optional in Angular 2 and higher and is just a suggested way for DI in TestBed tests.

It a convenience wrapper for testBed.get that allows to avoid multiple testBed.get calls, similarly to:

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

Other helper functions can be optionally used in conjunction with inject, namely async and fakeAsync.

Solution 3 - Angular

These used to be equivalent, but with Angular 9 the preferred method became inject().

TestBed.get() is deprecated in Angular 9+, and TestBed.inject() is now the preferred type-safe way to inject a dependency.

Read the documentation for clarity: TestBed.get() and TestBed.inject(). The change is one of deprecation.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioncsaldanhView Question on Stackoverflow
Solution 1 - AngularTom MaherView Answer on Stackoverflow
Solution 2 - AngularEstus FlaskView Answer on Stackoverflow
Solution 3 - AngularTony BrasunasView Answer on Stackoverflow