Angular 7 Test: NullInjectorError: Kein Anbieter für ActivatedRoute

Lesezeit: 3 Minuten

Benutzeravatar von Daniele Caputo
Daniel Caputo

Hallo, ich habe einen Fehler beim Testen meiner App, die mit Angular 7 erstellt wurde. Ich habe nicht viel Erfahrung mit Angular, daher würde ich Ihre Hilfe benötigen +

Error: StaticInjectorError(DynamicTestModule)[BeerDetailsComponent -> ActivatedRoute]: 
  StaticInjectorError(Platform: core)[BeerDetailsComponent -> ActivatedRoute]: 
    NullInjectorError: No provider for ActivatedRoute!

der Testcode sieht so aus:

import { async, ComponentFixture, TestBed, inject } from '@angular/core/testing';
import { BeerDetailsComponent } from './beer-details.component';
import {
  HttpClientTestingModule,
  HttpTestingController
} from '@angular/common/http/testing';

describe('BeerDetailsComponent', () => {
  let component: BeerDetailsComponent;
  let fixture: ComponentFixture<BeerDetailsComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientTestingModule],
      declarations: [ BeerDetailsComponent ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(BeerDetailsComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create',
  inject(
    [HttpTestingController],
    () => {
      expect(component).toBeTruthy();
    }
  )
)
});

Ich finde wirklich keine Lösung.

Daniele

Benutzeravatar von RaulDanielPopa
Raúl Daniel Popa

Sie müssen RouterTestingModule importieren

import { RouterTestingModule } from "@angular/router/testing";

imports: [
    ...
    RouterTestingModule
    ...
]

  • Wenn ich das mache, bekomme ich den Fehler NullInjectorError: No provider for ActivatedRoute!

    – Ross Brasseaux

    3. Juli 2020 um 20:24 Uhr

  • Haben Sie dieses Modul in die Spezifikationsdatei importiert?

    – RaulDanielPopa

    4. August 2020 um 19:24 Uhr

  • Ich glaube, die Lösung bestand darin, einen Anbieter für die Route hinzuzufügen, wobei ein anonymes Objekt verwendet wurde, das die Eigenschaften enthält, auf die der Test zugreift.

    – Ross Brasseaux

    4. August 2020 um 19:33 Uhr

  • Dies sollte die akzeptierte Antwort sein

    – Alfredo A.

    10. Februar 2022 um 14:54 Uhr

  • Wenn Sie 2022 dazu kommen, dann RouterTestingModule lebt jetzt in @angular/common/http/testing

    – Mike Poole

    4. Juli 2022 um 13:56 Uhr

Fügen Sie den folgenden Import hinzu

  imports: [ 
    RouterModule.forRoot([]),
    ...
  ],

  • Wo soll ich RouterModule.forRoot importieren ([]),?

    – Daniele Caputo

    6. Dezember 2018 um 15:14 Uhr

  • Im Modul import { RouterModule } from '@angular/router';

    – Sachila Ranawaka

    6. Dezember 2018 um 15:14 Uhr

  • RouterModule sollte nicht in den Testdateien enthalten sein

    – Arjun Panik

    16. April 2020 um 11:01 Uhr

  • das ist keine richtige Lösung, dadurch müssen Sie alle Roter-Modul-Provider-Parameter, APP_BASE_HREF-Token usw. definieren. Verwenden Sie stattdessen RouterTestingModule ohne Router-Provider-Deklarationen

    – cagcak

    29. Mai 2020 um 11:18 Uhr

  • Wäre eine gute Antwort, wenn Sie angeben, wo der Import hinzugefügt werden soll

    – NiemandIrgendwo

    10. Dezember 2020 um 9:34 Uhr

Ich hatte diesen Fehler auch einige Zeit beim Testen, und keine dieser Antworten hat mir wirklich geholfen. Was es für mich behoben hat, war das Importieren sowohl des RouterTestingModule als auch des HttpClientTestingModule.

Im Wesentlichen würde es in Ihrer Datei “whatever.component.spec.ts” so aussehen.

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ProductComponent],
      imports: [RouterTestingModule, HttpClientTestingModule],
    }).compileComponents();
  }));

Sie können die Importe von erhalten

import { RouterTestingModule } from "@angular/router/testing";
import { HttpClientTestingModule } from "@angular/common/http/testing";

Ich weiß nicht, ob das die beste Lösung ist, aber das hat bei mir funktioniert.

Dieses Problem kann wie folgt behoben werden:

  1. In Ihrer Entsprechung spec.ts Datei importieren RouterTestingModule

    import { RouterTestingModule } from '@angular/router/testing';

  2. Fügen Sie in derselben Datei hinzu RouterTestingModul als einer der Importe

     beforeEach(() => {
        TestBed.configureTestingModule({
        imports: [RouterTestingModule],
        providers: [Service]
      });
     });
    

Beispiel für einen einfachen Test mit dem Dienst und ActivatedRoute! Viel Glück!

    import { async, ComponentFixture, TestBed } from '@angular/core/testing';
    import { RouterTestingModule } from '@angular/router/testing';
    import { HttpClientModule } from '@angular/common/http';
    import { MyComponent } from './my.component';
    import { ActivatedRoute } from '@angular/router';
    import { MyService } from '../../core/services/my.service';


    describe('MyComponent class test', () => {
    let component: MyComponent;
    let fixture: ComponentFixture<MyComponent>;
    let teste: MyComponent;
    let route: ActivatedRoute;
    let myService: MyService;

    beforeEach(async(() => {
        teste = new MyComponent(route, myService);
        TestBed.configureTestingModule({
        declarations: [ MyComponent ],
        imports: [
            RouterTestingModule,
            HttpClientModule
        ],
        providers: [MyService]
        })
        .compileComponents();
    }));

    beforeEach(() => {
        fixture = TestBed.createComponent(MyComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });

    it('Checks if the class was created', () => {
        expect(component).toBeTruthy();
    });

    });

  • Benutzt du teste überall? wofür wird es benötigt?

    – JSON-Derulo

    21. August 2020 um 9:19 Uhr

  • Ich verwende überall, wo ich arbeite, eine Möglichkeit, um sicherzustellen, dass die Anwendung nach einer Änderung weiter funktioniert, ohne meinen Code zu beschädigen.

    – Cherma Ramalho

    11. September 2020 um 17:00 Uhr

  • Benutzt du teste überall? wofür wird es benötigt?

    – JSON-Derulo

    21. August 2020 um 9:19 Uhr

  • Ich verwende überall, wo ich arbeite, eine Möglichkeit, um sicherzustellen, dass die Anwendung nach einer Änderung weiter funktioniert, ohne meinen Code zu beschädigen.

    – Cherma Ramalho

    11. September 2020 um 17:00 Uhr

1438640cookie-checkAngular 7 Test: NullInjectorError: Kein Anbieter für ActivatedRoute

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy