On 10.01.2025 11:16,
mick...@posteo.net wrote:
> On 10.01.2025 10:25, Mario Alexandro Santini wrote:
>> On Fri, Jan 10, 2025 at 9:07 AM <
mick...@posteo.net> wrote:
>>
>>> Ho posto la domanda su stackoverflow [1], se volete darle
>>> un'occhiata.
>>> [1]
>>>
https://stackoverflow.com/questions/79344981/angular-unit-test-of-ngrx-effects-actions-not-purged
>>
>> Ho l'impressione che il problema sia proprio di setup dei test.
>>
>> In particolare, credo che il problema sia la variabile actions$.
>>
>> La avvalori dopo aver fatto l'injection, perché quello sta nel
>> beforeEach, mentre la actions$ è nel test.
>>
> Non è esatto, ma hai toccato uno dei punti che non mi sono chiari:
> avvaloro action$ nel punto in cui la dichiaro, come "new
> Observable()". Poi all'interno del test sostituisco il valore con una
> of(...).
>
Piccolo aggiornamento, per chi fosse curioso.
Nonostante l'pproccio iniziale fosse lo stesso suggerito della
documentazione ufficiale [1], ho voluto provare la soluzione suggeritami
su stackoverflow [2]: sostanzialmente ho definito action$ come Subject,
invece che come Observable, il quale ha un metodo next() per emettere il
valore successivo. Lo istanzio nella beforeEach, prima di inizializzare
l'injection-context e lo uso durante il test (invece che sostituirlo
all'interno del test, come facevo prima).
In questo modo l'effect viene comunque eseguito due volte, ma
all'interno dello stesso test. Dal momento che la situazione non
compromette l'esito della batteria di test, ho deciso che per il momento
lo lascio così, ma cosa succeda sotto il cofano mi appare ancora
misterioso.
In compenso, rimuginandoci sopra, forse ho capito come faceva a
funzionare quello di prima. Se io definisco una variabile, e poi
definisco una lambda che la utilizza, quello che viene passato alla
lambda è un riferimento ad essa; nel caso di un oggetto, che già di per
sè è un riferimento, quello che viene passato è un "riferimento al
riferimento" (concetto che non pi pare esista, per un utilizzo diretto,
giusto?), quindi scrivendo "action$=of(...)", anche la action$ usata
nella beforeEach risulta modificata. Questo l'ho intuito dal fatto che
anche variabili non riferimento (come number) rimangono allineate.
Ma allora mi domando: se io definisco una variabile, ed una lambda che
ne fa uso, e poi esco dallo scope della variabile, mentre la lambda è
ancora in uso, quest'ultima si ritrova con un riferimento non valido?
Oppure ci sono dei meccanismi di reference-counting, per cui la
variabile rimane valida anche dopo che sono uscito dalla funzione in cui
l'ho definita?
--
Mick
[1]
https://ngrx.io/guide/effects/testing
[2]
https://stackoverflow.com/questions/79344981/angular-unit-test-of-ngrx-effects-actions-not-purged