Voilà, c’est testé et ça marche comme c’est prévu!
L’état initial est bien récupéré (sauf en ‹ rapide › mais ce mode fait bugger plus qu’autre chose chez moi, sans doute trop rapide).
Ça va être top! Merci!
Édit: Après réflexion, peut-être qu’ajouter une pause (100ms?) avant d’envoyer le dernier état dans le mode ‹ rapide › résoudrait le problème (chez moi). Ou ralentir le ‹ rapide › ? A 200ms?
Excellente idée !
C’est via la création de clignotement manuel que j’avais constaté un souci avec l’état initial des Philips Hue.
Si je peux faire clignoter ma maison en rouge lorsqu’un détecteur de fumée s’enclenche sans devoir créer 30 lignes de scène comme je le fais aujourd’hui, je suis preneur
Hello. J’ai pris en compte tes retours concernant le statut bloquant de l’action mais je rencontre quelques soucis lors des tests réels. Je reviens vers toi (et ici pour d’autres testeurs) dès que je me remets dessus.
J’ai réussi à fixer le problème, mais je bloque maintenant sur les tests.
J’utilise la fonction setTimeout de timers/promises (qui est un timeout sous forme de Promise).
Cela donne dans ma boucle for :
Mais lors des tests, je ne veux pas gérer de notion de temps et résoudre ma Promise immédiatement. J’utilise donc proxyquire pour remplacer la méthode par une Promise simple de fake.
J’ai fait ça :
Mais ce n’est pas pris en compte, j’obtiens l’erreur suivante :
scene.blink-lights
should blink light in slow mode:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/cyril.beslay.home/workspace/Gladys/server/test/lib/scene/actions/scene.action.blinkLights.test.js)
at listOnTimeout (node:internal/timers:569:17)
at process.processTimers (node:internal/timers:512:7)
Juste 2 petites remarques :
Pourquoi ne pas multiplier ta constante blinking_time directement dans sa déclaration pour éviter le calcul dans la boucle
const blinkingTime = action.blinking_time * 1000 ;
J’ai toujours utilisé des noms de variables doublée (ii aul lieu de i) c’est plus facile à tracer ensuite !
Pour passer 120 secondes puis arrêter le clock et réaliser la Promesse. Ca ne fonctionnait pas sans le clock.restore() car ça rentre en conflit de gestion d’horloge (de ce que j’en ai compris… ^^)