Kibana gilt als eines der größten öffentlichen Monorepos auf GitHub mit über drei Millionen Zeilen TypeScript-Code und einer aktiven Entwicklergemeinschaft von mehr als 150 monatlichen Committern. Die Pflege eines solch umfangreichen Codebestands stellt Entwicklerteams vor zahlreiche Herausforderungen. Eine davon ist das fortlaufende Aktualisieren von Drittanbieter-Abhängigkeiten, um technische Schulden zu vermeiden und von neuen Features zu profitieren. Im Fokus steht hier das Upgrade von @testing-library/user-event von der Version 13 auf Version 14.5.
2, ein Prozess, der sich als komplexer und lehrreicher als ursprünglich erwartet herausstellte.Die Einführung der Version 14 von user-event brachte wesentliche Änderungen mit sich, die nicht nur technischer Natur waren, sondern auch die Testinfrastruktur und den Entwicklungsworkflow tiefgreifend beeinflussten. Eine der zentralen Neuerungen ist, dass sämtliche user-event-Methoden nun Promises zurückgeben. Dies bedeutet eine Umstellung auf asynchrones Testen, bei dem jeder Aufruf von Funktionen wie click() oder type() mit einem await versehen werden muss. Das Ziel dieser Änderung ist es, eine realistischere Simulation von Benutzerinteraktionen abzubilden, die im Browser ebenfalls asynchron ablaufen.
Doch in einem gigantischen Codeprojekt wie Kibana ist dies nicht einfach umzusetzen, da hunderte von Testdateien angepasst werden müssen und dies wiederum viele Teams betrifft.Eine weitere gravierende Änderung betraf das Handling von Pointer-Events. Die bisherige Konvention, den Parameter { skipPointerEventsCheck: true } zu verwenden, wurde durch { pointerEventsCheck: 0 } ersetzt. Diese Anpassung stellte sicher, dass die Event-Handling-Mechanismen nun noch präziser dem Verhalten im Browser entsprechen. In der Praxis führten diese Umstellungen dazu, dass bisher verborgene Fehler in den Tests ans Licht kamen, da das neue System der Event-Bubbling- und Propagation-Richtlinien näher an der Realität ist.
Die Entwickler mussten daher nicht nur die Testmethoden anpassen, sondern auch bestehende Tests kritisch auf ihre Validität überprüfen und teilweise korrigieren.Ein unerwartetes und nicht zu unterschätzendes Problem, das mit dem Upgrade einherging, war die Performance. Die Testläufe wurden merklich langsamer, vor allem bei Operationen wie dem Schreiben von Text über userEvent.type(). Dies führte dazu, dass Tests häufiger Timeout-Fehler erzeugten und die CI-Pipeline spürbar längere Laufzeiten aufwies.
Tec-Communities berichteten auch außerhalb von Kibana von ähnlichen Problemen mit der Version 14, wodurch klar wurde, dass die Priorität der Entwickler hinter user-event auf einer realistischeren Simulation von Nutzerinteraktionen liegt, auch wenn dies die Testgeschwindigkeit beeinträchtigt.Um diesen Performanceeinbruch zu mildern, griff das Kibana-Team auf pragmatische Workarounds zurück. Dazu gehörte das Ausschalten der künstlichen Verzögerung in der setup-Funktion von user-event durch Setzen von delay auf null. Auch wurde die Pointer-Event-Prüfung durch den neuen Parameter pointerEventsCheck auf 0 deaktiviert, um die teure DOM-Traversierung zu überspringen. Für zeitkritische Tests mit Timer-Logik half der Einsatz von Jest-Funktionalitäten zur Zeitsimulation, wie beispielsweise die Verwendung von advanceTimersByTime, um kontrollierte Zeitschritte zu ermöglichen.
Trotz dieser Maßnahmen war nicht immer eine vollständige Abdeckung mittels user-event möglich, weshalb in einzelnen Fällen fallback auf fireEvent genutzt wurde, um Laufzeitprobleme zu umgehen.Neben der technischen Umsetzung stellte das Upgrade auch die Frage nach der Skalierbarkeit der Teststrategien und dem Umgang mit technischem Risiko in einer so großen Organisation. Da Tests nicht nur Entwicklerfeedback bieten, sondern auch die Qualitätssicherung in CI/CD-Pipelines sicherstellen, hat eine Verlangsamung direkte Auswirkungen auf Release-Zyklen und Logistikkosten. Daher mussten Zeitlimits für einige Tests erhöht und die Testkonzepte insbesondere bei komplexen Formularen überdacht werden, um unnötige Verzögerungen zu vermeiden. Diese Erfahrungen zeigen, wie eng technische Entscheidungen und organisatorische Abläufe miteinander verwoben sind.
Die praktische Umsetzung des Upgrades erfolgte manuell, da zum Zeitpunkt der Umstellung keine automatisierten Tools oder Codemods existierten, die alle unterschiedlichen Testmuster und individuellen Anpassungen im Kibana-Testsuite sicher abdecken konnten. Die erhebliche Anzahl von betroffenen Dateien – über 400 mit mehreren tausend Änderungen – illustriert den Umfang dieser Herausforderung. In der Praxis bedeutete das insbesondere, viele Tests manuell zu verändern, um asynchrones Verhalten zu berücksichtigen, Event-Handler anzupassen und neue APIs korrekt zu verwenden. Einfache Muster, wie der direkte Aufruf von userEvent.click ohne await, mussten überall systematisch überarbeitet werden.
Darüber hinaus gab es signifikante Änderungen im Umgang mit bestimmten Test-Szenarien. Funktionen wie waitForElementToBeRemoved wurden durch andere Konstrukte ersetzt, die eine bessere Kontrolle über das Vorhandensein oder Fehlen von DOM-Elementen gewährleisten. Auch die Syntax für Tastatur-Eingaben wurde überarbeitet und muss nun mit korrekter Groß- und Kleinschreibung der Tastenbezeichnungen verwendet werden, um die Kompatibilität zu garantieren. Selbst der Umgang mit der Funktion userEvent.paste änderte sich grundlegend: Vorher konnte direkt das Element und der Text übergeben werden, nun müssen Klicks und das eigentliche Einfügen in getrennten Schritten erfolgen.
Ein wichtiges Learning aus dem gesamten Prozess war, dass groß angelegte Upgrades solcher fundamentalen Bibliotheken wie user-event einer eingehenden Analyse der bestehenden Testlandschaft bedürfen. Die Migration ist weniger eine rein technische Aufgabe, sondern erfordert ein Verständnis der unterschiedlichen Testmuster und der Intentionalität hinter den bestehenden Tests. Auch die Zusammenarbeit zwischen verschiedenen Teams ist essentiell, da Codeowner aus diversen Bereichen zusammenkommen müssen, um ein konsistentes und fehlerfreies Upgrade zu gewährleisten. Es wurde deutlich, dass nur mit kollektiver Verantwortung und abgestimmtem Vorgehen in einem großen Projekt ein erfolgreiches Upgrade möglich ist.Die ganze Erfahrung war für die Entwickler in Kibana zugleich mühsam und bereichernd.
Sie glich einer artarchäologischen Ausgrabung, bei der über Jahre gewachsene Testpraktiken durchforstet und in das neue Paradigma überführt wurden. Diese intensive Auseinandersetzung führte zu wertvollen Erkenntnissen über Teststrategien und zeigte auf, wie wichtig es ist, technische Schulden regelmäßig abzubauen und Bibliotheken aktuell zu halten. Das Projektteam erhielt im Anschluss positives Feedback von Kollegen, was motiviert, auch zukünftige Herausforderungen mit Zuversicht anzugehen.Für Entwickler, die noch ältere Versionen von user-event verwenden, bietet diese Erfahrung wichtige Hinweise und praxisnahe Empfehlungen. Das Upgrade auf Version 14, obwohl mit Aufwand verbunden, macht Tests realistischer und verbessert langfristig die Qualitätssicherung.
Gleichzeitig sollten Teams auf die Performance achten und Möglichkeiten nutzen, um kritische Tests zu optimieren oder alternative Methoden einzusetzen. Das Beispiel von Kibana dient damit als wertvolle Orientierung für große und komplexe Codebasen, die ähnliche Updates planen. Es wird empfohlen, sich frühzeitig mit den Breaking Changes und Performancefragen auseinanderzusetzen und den Austausch zwischen Teams zu suchen, um Übergänge möglichst reibungslos zu gestalten.Insgesamt zeigt die Geschichte des Upgrades von user-event in Kibana eindrucksvoll, wie Softwareentwicklung in großen Projekten über reine Programmierung hinausgeht und durch organisatorische, technische und kommunikative Komponenten geprägt ist. Der Balanceakt zwischen technischer Aktualisierung, Performance und Teststabilität erfordert Sorgfalt, Teamarbeit und oft kreative Lösungen.
Doch die Mühe lohnt sich, denn moderne Testwerkzeuge sorgen für eine robustere Codequalität und eine bessere Entwicklererfahrung – grundlegende Faktoren für den nachhaltigen Erfolg von Projekten wie Kibana.