Winkel-2+: Prüfung form mit matt-Folie-toggle - change-Ereignis wird nicht ausgelöst

Ich bin nicht sicher, warum die das change-Ereignis nicht auslösen und daher nicht auslösen die Funktion habe ich registriert für das change-Ereignis.

Ich weiß, das funktioniert, wenn ich es ausführen, aber ich kann es nicht in der spec.

Hier ist eine demo von was ich spreche... Wie Sie sehen können aus den Protokollen, die toggle nie aufgerufen wird:
https://stackblitz.com/edit/angular-material-slide-toggle-test-utmbmy?file=app%2Fhello.component.spec.ts

Rund, das ist mein code hier...

component.html:

<mat-slide-toggle [checked]="useDefault" (change)="toggle($event)"></mat-slide-toggle>

Komponente.ts:

...
toggle(event: MatSlideToggleChange) {
  console.log('Toggle fired');
  this.useDefault = event.checked;
}

In meinem spec.ts:

it('should trigger toggle...', () => {
  const componentDebug = fixture.debugElement;
  const slider: MatSlideToggle = 
     componentDebug.query(By.css('form mat-slide-toggle')).componentInstance;

  console.log('before ' + slider.checked);
  slider.toggle();

  fixture.detectChanges();

  console.log('after ' + slider.checked);
  console.log('useDefault ' + component.useDefault);
});

Den after Protokollierung nicht drucken slider.checked zu den entgegengesetzten Wert von before. Jedoch, die component.useDefault bleibt die gleiche, und die logging-Anweisung in der toggle Funktion nie aufgerufen wird, was bedeutet, dass es nie Eintritt.

Warum ist das passiert und wie kann ich dieses Problem beheben?

Habe ich habe versucht, indem Sie die ganze Sache in fakeAsync mit tick können, indem die 'nach' - code in fixture.whenStable() und fixture.whenRenderingDone().

Ich habe eine NoopAnimationsModule im TestBed's import.

  • Was ist die useDefault? Ist etwas aus der mat-slide-toggle? Ist eine Richtlinie, die Sie erstellt haben?
  • stackblitz.com/edit/angular-material-slide-toggle-test?file=app/...
  • Ok, ich aktualisiert meine Frage code. useDefault war nur ein Tippfehler, es sollte [checked]="useDefault". Allerdings habe ich modifizierte Komponente ein bisschen mehr im Einklang mit dem, was ich habe, also, beginnen mit useDefault = true. Ich habe nur Hinzugefügt, einige logging-Anweisungen. Nun, aus Gründen, die ich nicht verstehen kann, die toggle log nicht angezeigt, bis nicht mehr:stackblitz.com/edit/...
  • Versuchen Sie auslösen des change-Ereignisses direkt: componentDebug.query(By.css('mat-slide-toggle')).nativeElement.dispatchEvent(new Event('change')); werden Sie wahrscheinlich haben, zu verhöhnen, die MatSlideToggleChange Objekt somhow als gut.
InformationsquelleAutor user1902183 | 2018-06-06
Schreibe einen Kommentar