Glühbirne/Steckdose zum Blinken bringen

In der Zwischenzeit ist ein neues Bild :whale: verfügbar cicoub13/gladys:blinking-lights. Was behoben wurde, ist die Tatsache, dass die Aktion blockierend ist.

Zum Beispiel, wenn Sie eine Aktion « Nachricht senden » hinzufügen, wird dies erst erfolgen, nachdem das Licht aufgehört hat zu blinken.

2 Möglichkeiten, das zu lösen :slight_smile:

Zuerst, wenn du die Zeit in den Tests beeinflussen kannst!

https://sinonjs.org/releases/latest/fake-timers/

Ansonsten kannst du in deinen Tests viel kleinere Zeiten verwenden, damit es schneller durchläuft.

Ich war auf die Option Fake-Uhr (die mir einfacher erscheint) gegangen, aber es hat nicht funktioniert. Ich werde es nochmal versuchen, danke.

hallo @cicoub13

Nur zwei kleine Anmerkung:
Warum multiplizierst du deine Konstante blinking_time nicht direkt bei ihrer Deklaration, um die Berechnung in der Schleife zu vermeiden?
const blinkingTime = action.blinking_time * 1000 ;
Ich habe immer doppelte Variablennamen verwendet (ii statt i) — das ist später leichter nachzuverfolgen!

Ansonsten bin ich in dieser Sprache nicht gut genug bewandert! :woozy_face:

Hallo @cicoub,

Ich weiß nicht, ob dir das weiterhilft und ob der Fall zutrifft:
server/test/services/netatmo/lib/netatmo.pollRefreshingValues.test.js

… ich hoffe …

Ich habe mich damit herumgeschlagen, es zum Laufen zu bringen. Aber mit einer Mischung aus Copilot / ChatGPT / Stackoverflow hat es mit dieser Kombination funktioniert (insbesondere der erste Test)

Du wirst diesen Teil im zweiten Test bemerken:

    clock.tick(120 * 1000);
    clock.restore();
    // eslint-disable-next-line no-promise-executor-return
    await new Promise((resolve) => setTimeout(resolve, 50));

Um 120 Sekunden zu überspringen, dann den clock zu stoppen und das Versprechen zu erfüllen. Es hat nicht funktioniert ohne das clock.restore(), weil es zu einem Konflikt in der Zeiterfassung kommt (soweit ich das verstanden habe… ^^)

Das ist korrigiert, danke

Das funktioniert mit den Fake-Timern von SinonJS. Ich musste auf Version 8.1.1 aktualisieren (zuvor 7.2.4), um clock.tickAsync() nutzen zu können.

Übrigens, sie sind bereits bei Version 17 :sweat:

Danke @Terdious und @pierre-gilles, das war nicht einfach, diese Tests mit Zeitkonzepten :sweat_smile:

Ich sage dir Bescheid, wenn alles fertig ist

PR bereit (funktional, Entwicklung, Tests) :tada:

Danke für die PR @cicoub13 :slight_smile:

Ich habe einen kleinen Bug beim Testen in der Praxis gefunden:

Aber nichts Schlimmes, ansonsten funktioniert das Verhalten gut!

Das ist korrigiert

Danke für das Fix @cicoub13! Für mich ist es okay, es ist in master gemerged und wird in der nächsten Version von Gladys enthalten sein :slight_smile:

Diese Funktion ist in Gladys Assistant 4.38 verfügbar :slight_smile:

Ich schließe dieses Thema, um die Stimmen freizugeben. Zögern Sie nicht, bei Problemen/Feedback andere Themen zu erstellen :slight_smile:

Vielen Dank an @cicoub13 für die Entwicklung :folded_hands: