How to Unit-Test-Eckige 2-routing params

Sagen, dass ich will einfach nur den Komponententest eine Komponente, welche Parameter aus einem Teil der Strecke. Zum Beispiel, meine Komponente ngOnInit sieht wie folgt aus:

  ngOnInit() {
    this.route.parent.params.switchMap((params: Params) => this.service.getProject(params['projectId']))
      .subscribe((project: Project) => this.update(project));
  }

Wie kann ich nun:
1: meine setup-test, so dass die Komponente erstellen funktioniert das überhaupt, also kann ich das Gerät testen, andere Teile

Bearbeitet mit Antwort - das Beispiel ActivatedRouteStub verlängert werden sollte, mit einem Elternteil, die auch über eine beobachtbare Parameter, und ich hätte useClass statt useValue (vergessen zu ändern zurück):

@Injectable()
export class ActivatedRouteStub {

    //ActivatedRoute.params is Observable
    private subject = new BehaviorSubject(this.testParams);
    params = this.subject.asObservable();

    //Test parameters
    private _testParams: {};
    get testParams() { return this._testParams; }
    set testParams(params: {}) {
        this._testParams = params;
        this.subject.next(params);
    }

    //ActivatedRoute.snapshot.params
    get snapshot() {
        return { params: this.testParams };
    }
        //ActivatedRoute.parent.params
    get parent() {
        return { params: this.subject.asObservable() };
    }
}

2: geben Sie einen Wert für die projectId in meinem UnitTest?

Beispiele aus der angular2 Dokumentation nicht zu funktionieren scheint für switchMap, oder sogar überhaupt (ich habe die ActivatedRouteStub von dort, aber kein Glück mit, dass bisher - params ist immer undefiniert).

Bearbeitet mit Antwort:

describe('ProjectDetailsComponent', () => {
  let component: ProjectDetailsComponent;
  let fixture: ComponentFixture<ProjectDetailsComponent>;
  let activatedRoute: ActivatedRouteStub;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [RouterTestingModule.withRoutes([{ path: 'projects/:projectId', component: ProjectDetailsComponent }])],
      declarations: [ProjectDetailsComponent],
      schemas: [NO_ERRORS_SCHEMA],
      providers: [{ provide: ProjectsService, useClass: ProjectsServiceStub }, {provide: ActivatedRoute, useClass: ActivatedRouteStub}]
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(ProjectDetailsComponent);
    component = fixture.componentInstance;
    activatedRoute = fixture.debugElement.injector.get(ActivatedRoute);
    activatedRoute.testParams = { projectId: '123'};
    fixture.detectChanges();
  });

  fit('should create', () => {
    expect(component).toBeTruthy();
  });
});
InformationsquelleAutor Arwin | 2017-02-05
Schreibe einen Kommentar