Eckige 4 - unit-test für eine subscribe-Funktion in einer Komponente
Winkel 4 unit-test für eine abonnieren.
Möchte ich testen, ob meine abonnieren liefert ein array mit Benutzer.
Ich will simulieren Sie eine Liste der Benutzer und testen Sie eine Funktion, die aufgerufen wird getUsers.
Abonnieren unit-test funktioniert nicht.
Etwas falsch mit der syntax.
Dies ist mein Benutzer-Schnittstelle:
export interface User {
id: number;
name: string;
username: string;
email: string;
address: {
street: string;
suite: string;
city: string;
zipcode: string;
geo: {
lat: string;
lng: string;
}
};
phone: string;
website: string;
company: {
name: string;
catchPhrase: string;
bs: string;
};
};
Dies ist meine Komponente die ich testen möchte:
import { Component, OnInit } from "@angular/core";
import { Observable } from "rxjs/Observable";
import { UserService } from "../../services/user.service";
import { User } from "../../models/user.model";
@Component({
selector: "home-users",
templateUrl: "./home.component.html"
})
export class HomeComponent implements OnInit {
private listOfUsers: User[];
constructor(private userService: UserService) {
}
ngOnInit() {
this.getUsers();
}
getUsers(): void {
this.userService.getUsers().subscribe(users => {
this.listOfUsers = users;
});
}
}
Dies ist mein unit-test-Versuch:
import { TestBed, async, inject } from "@angular/core/testing";
import { HttpModule } from "@angular/http";
import { HomeComponent } from "./home.component";
import { UserService } from "../../services/user.service";
import { User } from "../../models/user.model";
describe("HomeComponent", () => {
let userService;
let homeComponent;
let fixture;
let element;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
HomeComponent
],
providers: [
UserService
],
imports: [HttpModule]
}).compileComponents();
}));
beforeEach(inject([UserService], s => {
userService = s;
fixture = TestBed.createComponent(HomeComponent);
homeComponent = fixture.componentInstance;
element = fixture.nativeElement;
}));
it("should call getUsers and return list of users", async(() => {
//Arrange
let response: User[] = [];
//Act
homeComponent.getUsers();
fixture.detectChanges();
fixture.whenStable().subscribe(() => {
expect(homeComponent.listOfUsers).toEqual(response);
});
}));
});
der test funktioniert nicht. Scheint etwas falsch mit der syntax für das abonnieren Teil der Prüfung
InformationsquelleAutor AngularM | 2017-08-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie diese (für version rxjs 6+, für die alte version der Antwort unten):
Für alte rxjs version ändern, importieren von:
zu
Ich aktualisiert meine Antwort. Natürlich müssen Sie
of
Eigentlich kann ich nicht jetzt versuchen 😀 Hat das geklappt? Ich fügte hinzu, Scherz, support und gestern alles lief. Aber jetzt bekomme ich einige seltsame Fehler 🙂
Das funktionierte! Tun Sie denken, es lohnt sich ein test? Oder sollte ich nur testen Sie meine Dienstleistung und nicht als eine Komponente?
Ich denke, Sie müssen prüfen, wenn Sie haben eine gewisse Logik. Zum Beispiel haben Sie einige Daten empfangen vom server und Sie haben die server die Verarbeitung dieser Daten. Dies ist wichtig, Logik und darf nicht gebrochen werden. Sie haben unit-Tests. In deinem Beispiel: ja, warum nicht, wenn es einfach zu testen. Diese verteidigen wird künftigen Entwicklern von versehentlich entfernen Sie dieses Abonnement.
InformationsquelleAutor Sharikov Vladislav