Почему ссылка viewChild на модульный тест Angular 8 не определена - PullRequest
0 голосов
/ 14 июня 2019

Я использую Angular 8 в своем проекте, но у меня проблема с модульным тестом, когда у меня есть компонент с ViewChild Ref в модульном тесте не определено.любая помощь

У меня есть один компонент

@Component({
  selector: "app-rating-star",
  templateUrl: "./rating-star.component.html",
  styleUrls: ["./rating-star.component.scss"],
  encapsulation: ViewEncapsulation.None
})
export class RatingStarComponent implements OnInit, AfterViewInit {
  @ViewChild("measurementBoxStar") measurementBox: ElementRef;

  constructor(private _render: Renderer2) {}

  ngOnInit() {}

  ngAfterViewInit() {
    this._render.addClass(this.measurementBox.nativeElement, newClass);
  }
}

, и мой юнит-тест для этого компонента

beforeEach(async(() => {
  TestBed.configureTestingModule({
    schemas: [NO_ERRORS_SCHEMA],
    declarations: [RatingStarComponent],
    providers: [
      {
        provide: Renderer2,
        useClass: rootRendererMock
      }
    ]
  }).compileComponents();

  fixture = TestBed.createComponent(RatingStarComponent);
  component = fixture.componentInstance;
  fixture.detectChanges();
}));

it("check Input value for Box in red", () => {
  component = fixture.componentInstance;

  component.ngOnInit();
  fixture.detectChanges();

  component.ngAfterViewInit();
  expect(component.valueStar).toEqual(1.702);
  fixture.detectChanges();
  expect(component.measurementBox.nativeElement.querySelector("span").innerText)
    .toEqual("1.702");
});

, когда я запускаю юнит-тест, я получил этоошибка Ошибка для Жасмин

1 Ответ

0 голосов
/ 19 июня 2019

очевидно @ViewChild("measurementBoxStar") measurementBox: ElementRef; не возвращает никаких элементов.это может быть потому, что *ngIf="valueStar !== -1 && measurementName === ''" оценивается в false в тестах.Поэтому изменение вашей спецификации следующим образом должно решить проблему.

it("check Input value for Box in red", () => {
  component = fixture.componentInstance;
  component.measurementName = "";
  fixture.detectChanges();

  expect(component.valueStar).toEqual(1.702);
  expect(component.measurementBox.nativeElement.querySelector("span").innerText)
    .toEqual("1.702");
});
...