Questo test è estremamente semplice e dovrebbe essere diretto… ma…
Un’impostazione del plugin sta cambiando rispetto a quelle che ho configurato.
Quando il javascript viene eseguito come risultato del caricamento del Composer, il valore dell’impostazione impostato in precedenza nel blocco di accettazione non è più lo stesso!
Dovrebbe essere “user” come impostato nel codice del test, ma se viene registrato nella console, questo è ciò che vedo, ed è il motivo per cui il test fallisce:
Ho provato questo localmente. Sembra che ci siano alcuni fattori in gioco:
L’oggetto siteSettings a cui fai riferimento viene ottenuto dall’inizializzatore, e poi utilizzato in una chiamata modifyClass:
Gli inizializzatori vengono rieseguiti per ogni test. Il problema è che non abbiamo modo di “resettare” eventuali chiamate modifyClass che sono state effettuate dai test precedenti. La nostra soluzione è il parametro pluginId - significa che solo la prima chiamata modifyClassnell’intera suite di test viene effettivamente utilizzata. Le chiamate a modifyClass dagli inizializzatori nei test futuri vengono ignorate.
Normalmente va bene - il codice all’interno di un’invocazione modifyClass non tende a cambiare in ogni esecuzione del test. Tuttavia, in questo caso stai facendo riferimento al riferimento siteSettings dallo scope degli inizializzatori.
Il tl;dr qui è: nei test, questa implementazione significa che modifyClass rimarrà bloccato con le impostazioni del sito dall’ultimo test che è stato eseguito per primo.
La soluzione è utilizzare un riferimento siteSettings “al runtime” piuttosto che al momento dell’“inizializzatore”. Possiamo usare quello da model:composer stesso. Questa diff fa passare i test per me:
C’è un altro problema qui che sospetto sia dovuto allo stesso motivo:
currentUser è definito anche nell’inizializzatore.
Se il test sbagliato viene eseguito per secondo, questo viene valutato e non è più definito, quindi i test quando vengono eseguiti insieme possono fallire “metà” delle volte.
Penso che il modello Composer abbia user, quindi passerò a quello…