In Chai, können Sie Sachen wie folgt vorgehen:Wie funktionieren Assertion-Bibliotheken wie Chai, ohne einen Aufruf an eine Funktion zu erzwingen?
expect({}).to.exist;
exist
ist kein Funktionsaufruf, aber das funktioniert noch in Test-Frameworks. Das Gegenteil (expect({}).to.not.exist
) führt dazu, dass Tests fehlschlagen, aber exist
ist kein Funktionsaufruf.
Wie funktionieren diese Behauptungen, ohne dass ich eine Funktion aufrufen muss? Tatsächlich, wenn ich versuche, expect({}).to.exist()
zu sagen, schlägt der Test fehl, weil exist
keine Funktion ist.
Wie erklärt sich das? Das ist ein ziemlich großer Sprung ohne zu erklären, was in der Mitte passiert. – vsync
Der verlinkte Artikel hilft wirklich, Dinge zu erklären, wenn Sie mit Gettern nicht vertraut sind. Die kurze Version ist, dass Sie dank neuer (-ish) Browser-Verbesserungen eine Eigenschaft steuern können, die über die Einstellung hinausgeht (zB. 'A.b = 5'). Nun können Sie eine "Getter" -Methode für eine Eigenschaft definieren, und wenn ein Code versucht, den Wert dieser Eigenschaft zu lesen (z. B. "console.log (a.b)"), führt der Browser die definierte "Getter" -Methode aus. Diese Methode kann dann eine Logik auslösen (z. B. Chais Assertionslogik). Wenn Sie also eine 'to.exist'-Anweisung ausführen, obwohl noch kein '()' nach Ihnen * vorhanden ist, ruft * noch eine Methode auf (die Getter-Methode). – machineghost