È possibile sovrascrivere l'oggetto Site con il proprio fixture durante i test Front End di un Plugin?

Sto attualmente lavorando su questa PR: FIX: presenting formatted location on User Card by merefield · Pull Request #73 · merefield/discourse-locations · GitHub

Sto tentando di coprire la modifica con un nuovo test Front End.

Ma il test non viene eseguito perché manca un attributo di dati richiesto.

Il problema che sto affrontando è come sovrascrivere con successo i dati in Site con un fixture che si trova qui:

che contiene un attributo aggiuntivo che Site detiene quando è presente il plugin Locations.

… e farlo persistere per il resto del test!

Il nuovo test è qui.

Carico con successo Site con il fixture, apparentemente.

Mi fermo a questo punto di debug durante l’esecuzione di qunit nel browser e posso dire che è caricato correttamente:

  test("user card location - shows correct format", async function (assert) {
    const siteAttrs = {
      ...siteFixtures["site.json"].site,
    };
    PreloadStore.store("site", cloneJSON(siteAttrs));
    Site.resetCurrent();
    debugger;
    PreloadStore.get("site")

image

ma quando si fa clic sulla User Card, i dati non sono quelli che ci si aspetta e, in modo critico, manca l’attributo country_codes, quindi il test si blocca qui:

Perché i miei dati Site sovrascritti vengono persi?

1 Mi Piace

OK, questo è frustrante.

Sembra che il valore dell’oggetto Site sia impostato qui:

E non può essere sovrascritto?

Ho verificato questo modificando il fixture nel core (qui: discourse/app/assets/javascripts/discourse/tests/fixtures/site-fixtures.js at 93a4012ecb3af7306de0c51283d6dd2b2e90818c · discourse/discourse · GitHub) e rileva la mia modifica.

Ma non voglio questo, voglio sovrascriverlo nel mio test del plugin con un fixture memorizzato nel mio plugin.

Per ribadire, sono in grado di farlo per l’ambito del codice di test, ma una volta che il codice del plugin è in esecuzione, l’ambito sembra rilevare l’oggetto site che si riferisce al fixture caricato dall’helper di test del core…

:thinking:

Ho finalmente risolto questo problema. Ho capito che puoi usare needs proprio come faresti per altri oggetti:

Indizio qui:

Codice finale:

  needs.site(cloneJSON(siteFixtures["country_codes.json"]));
3 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.