标签:ref for bug course cte orm exp extc temp
Setting up a Presentational Component:
import {Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation} from ‘@angular/core‘; import {Course} from ‘../model/course‘; import { MatDialog, MatDialogConfig } from ‘@angular/material/dialog‘; import {CourseDialogComponent} from ‘../course-dialog/course-dialog.component‘; import {filter, tap} from ‘rxjs/operators‘; @Component({ selector: ‘courses-card-list‘, templateUrl: ‘./courses-card-list.component.html‘, styleUrls: [‘./courses-card-list.component.css‘] }) export class CoursesCardListComponent implements OnInit { @Input() courses: Course[]; @Output() courseEdited = new EventEmitter(); constructor(private dialog: MatDialog) { } ngOnInit() { } editCourse(course: Course) { const dialogConfig = new MatDialogConfig(); dialogConfig.disableClose = true; dialogConfig.autoFocus = true; dialogConfig.data = course; const dialogRef = this.dialog.open(CourseDialogComponent, dialogConfig); dialogRef.afterClosed() .pipe( filter(val => !!val), tap(() => this.courseEdited.emit()) ) .subscribe(); } }
Setting up test in BeforeEach:
import { async, ComponentFixture, TestBed } from "@angular/core/testing"; import { DebugElement } from "@angular/core"; let fixture: ComponentFixture<CoursesCardListComponent>, // For the Input bindings component: CoursesCardListComponent, // For query the DOM el: DebugElement; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [CoursesModule] }) .compileComponents() .then(() => { fixture = TestBed.createComponent(CoursesCardListComponent); component = fixture.componentInstance; el = fixture.debugElement; }); }));
Because ‘compileComponents‘ is an async operation, so we have to add ‘async‘ function from Angualr Testing lib.
Setup component bindings and detectChanges:
it("should display the course list", () => { // setup Input binding component.courses = setupCourses(); // detech cSetuphanges fixture.detectChanges(); const cards = el.queryAll(By.css(".course-card")); expect(cards).toBeTruthy(); expect(cards.length).toBe(12); });
-- Full test code --
import { async, ComponentFixture, TestBed } from "@angular/core/testing"; import { CoursesCardListComponent } from "./courses-card-list.component"; import { CoursesModule } from "../courses.module"; import { DebugElement } from "@angular/core"; import { setupCourses } from "../common/setup-test-data"; import { By } from "@angular/platform-browser"; fdescribe("CoursesCardListComponent", () => { let fixture: ComponentFixture<CoursesCardListComponent>, // For the Input bindings component: CoursesCardListComponent, // For query the DOM el: DebugElement; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [CoursesModule] }) .compileComponents() .then(() => { fixture = TestBed.createComponent(CoursesCardListComponent); component = fixture.componentInstance; el = fixture.debugElement; }); })); it("should create the component", () => { expect(component).toBeTruthy(); }); it("should display the course list", () => { // setup Input binding component.courses = setupCourses(); // detech cSetuphanges fixture.detectChanges(); const cards = el.queryAll(By.css(".course-card")); expect(cards).toBeTruthy("Cannot load cards"); expect(cards.length).toBe(12, "Unexpected cards number"); }); it("should display the first course", () => { // setup Input binding component.courses = setupCourses(); // detech cSetuphanges fixture.detectChanges(); const course = component.courses[0]; const firstCard = el.query(By.css(".course-card:first-child")); expect(firstCard).toBeTruthy("Could not find course card"); const title = firstCard.query(By.css("mat-card-title")); const img = firstCard.query(By.css("img")); expect(title.nativeElement.textContent).toBe(course.titles.description); expect(img.nativeElement.src).toBe(course.iconUrl); }); });
[Angular 8 Unit Testing] Testing a component
标签:ref for bug course cte orm exp extc temp
原文地址:https://www.cnblogs.com/Answer1215/p/12308164.html