gelten folgende Voraussetzungen Klasse ändertWie Einheit, um eine Funktion testen, die nur interner Zustand
class Observable() {
constructor() { this._cbs = []; }
on(cb) {
this._cbs.push(cb);
}
off(cb) {
this._cbs.splice(this._cbs.indexOf(cb));
}
trigger() {
this._cbs.forEach((cb) => cb());
}
}
Wie soll ich Unit-Test die on
Methode. Jetzt konnte ich das this._cbs
Array untersuchen und einfach überprüfen, ob der Callback darauf geschoben wurde. Aber wenn ich das tue, wende ich Implementierungswissen zu meinen Tests an. Oder ich könnte den Callback ausspionieren und trigger
anrufen und prüfen, ob der Callback angerufen wird oder nicht. Dies ist jedoch kein Integrationstest.
Also, was wäre im Allgemeinen der Ansatz für Unit-Test-Funktion, die nur interne Effekte haben?
Wenn die getestete Klasse den beobachtbaren Zustand des Systems ändert (in Ihrem Fall eine Eigenschaft), können Sie die vorgenommenen Änderungen bestätigen. – kayess
was ist mit einem Spion? –
Die einzige Operation in der on-Methode ist die Verwendung der Funktion 'Array.prototype.push', die Teil der JavaScript-Sprache ist. Sie müssen nicht testen, dass 'push' richtig funktioniert, weil es Teil der Sprache ist. Das Einzige, was du überprüfen kannst, ist das Ergebnis, das du erwähnt hast. – TW80000