Ich lerne Angular 2 testen (Karma, Jasmine). Ich habe bereits einen funktionierenden Test für einen HTTP-Dienst, der größtenteils von this Semaphore tutorial on services and testing gezogen wird. Ich habe den Test direkt durch die üblichen async Arbeits (injizieren ([MyService], ...Angular 2 verspottet einen Async-Dienst, der einen anderen Dienst ruft
Mein eigentliches Programm hat einen Dienst in einem Dienst eingewickelt, wie weiter unten.
@Injectable()
export class GlobalsService {
private options: Option[] = [];
error: any;
constructor(private optionService: OptionService) { }
public getGlobals(): void {
let that = this;
this.optionService
.getOptions()
.then(options => that.fillOptions(options))
.catch(error => that.error = error);
}
[SNIP]
Die optionService.getOptions () gibt ein Versprechen, die für die dann die Liste globalService.options füllt abgewartet. die globalsService.getGlobals() entweder synchron oder in einem Ort, wo die asynchrone (verzögert) füllen seines Inhalts versteckt sind genannt.
export class AppComponent implements OnInit {
constructor(private globalsService: GlobalsService) { }
ngOnInit() {
this.globalsService.getGlobals();
}
[SNIP]
Woran ich festhalte, ist, wie man globalsSer nennt vice.getGlobals() in einem Testkontext. Ich denke, ich soll es asynchron() nennen.
Bisher meine Mock OptionService ist:
@Injectable()
export class MockOptionService {
constructor() { }
getOptions(): Promise<Option[]> {
let options: Option[] = [
{ id: 'NY' } // truncated property list
];
return Promise.resolve(options);
}
}
ich dann nennen es durch bin der Planung:
it('should get Option objects async',
async(inject([GlobalsService, MockOptionService], (globalsService: GlobalsService, optionService: OptionService) => {
globalsService.getGlobals()
.then(() => {
expect(globalsService.getOptions().length).toBe(1);
});
aber mein "smart" Programmierer-Editor (Sublime Text) sagt, dass „Eigentum" dann‘existiert nicht auf Typ‚Leere‘.", ließ mich nicht sicher, ob ich async haben sollte (injizieren oder einfach nur einen tick() verwenden.
Kommentare, anyone?
Danke, Jerome.
.. Ändert nichts, sehe meine Antwort unten. –