programing

각도 7 테스트: Null Injector 오류: 활성화된 경로에 대한 공급자 없음

newstyles 2023. 10. 1. 19:20

각도 7 테스트: Null Injector 오류: 활성화된 경로에 대한 공급자 없음

안녕하세요, Angular 7로 만든 앱을 테스트하는 데 오류가 있습니다.제가 앵글 경험이 많지 않아서 도움이 필요할 것 같습니다.

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

테스트 코드는 다음과 같습니다.

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();
    }
  )
)
});

저는 정말 아무런 해결책을 찾을 수가 없습니다.

다니엘레

라우터 테스트 모듈을 가져와야 합니다.

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

imports: [
    ...
    RouterTestingModule
    ...
]

다음 가져오기 추가

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

테스트를 하는 동안에도 한동안 이런 오류가 있었는데, 이 중 어떤 것도 도움이 되지 않았습니다.제가 해결한 것은 라우터 테스트 모듈과 HttpClient 테스트 모듈을 모두 가져오는 것이었습니다.

따라서 기본적으로 당신의 what.component.spects 파일에서는 이렇게 보일 것입니다.

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

수입품은 다음에서 받으실 수 있습니다.

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

이것이 최선의 해결책인지는 모르겠지만, 이것은 저에게 효과가 있었습니다.

이 문제는 다음과 같이 해결할 수 있습니다.

  1. 해당 spec.ts 파일에서 RouterTestingModule

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

  2. 같은 파일에서 가져오기 중 하나로 RouterTestingModule을 추가합니다.

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

서비스와 ActivatedRoute를 이용한 간단한 테스트 예시!행운을 빕니다.

    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();
    });

    });

언급URL : https://stackoverflow.com/questions/53654341/angular-7-test-nullinjectorerror-no-provider-for-activatedroute