Est-il possible de remplacer l'objet Site par son propre fixture lors des tests Front End d'un Plugin ?

Je travaille actuellement sur cette PR : FIX: presenting formatted location on User Card by merefield · Pull Request #73 · merefield/discourse-locations · GitHub

J’essaie de couvrir le changement avec un nouveau test Front End.

Mais le test échoue à s’exécuter car un attribut de données requis n’est pas défini.

Le problème que je rencontre est de savoir comment remplacer avec succès les données dans Site par un fixture situé ici :

qui contient un attribut supplémentaire que Site détient lorsque le plugin Locations est présent.

… et le faire persister pour le reste du test !

Le nouveau test est ici.

Je charge Site avec le fixture avec succès, apparemment.

Je m’arrête à ce point de débogage pendant l’exécution de qunit dans le navigateur et je peux dire qu’il est correctement chargé :

  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

mais lorsque la carte utilisateur est cliquée, les données ne sont pas celles attendues et, de manière critique, l’attribut country_codes est manquant, de sorte que le test s’arrête ici :

Pourquoi mes données Site remplacées sont-elles perdues ?

1 « J'aime »

OK, c’est frustrant.

Il semble que la valeur de l’objet Site soit définie ici :

Et ne peut pas être remplacée ?

J’ai vérifié cela en modifiant le fixture dans le cœur (ici : discourse/app/assets/javascripts/discourse/tests/fixtures/site-fixtures.js at 93a4012ecb3af7306de0c51283d6dd2b2e90818c · discourse/discourse · GitHub) et il reprend ma modification.

Mais je ne veux pas de ça, je veux le remplacer dans mon test de plugin avec un fixture stocké dans mon plugin.

Pour réitérer, je suis capable de le faire pour la portée du code de test, mais une fois que le code du plugin s’exécute, la portée semble reprendre l’objet site qui se rapporte au fixture chargé par l’aide de test du cœur…

:thinking:

J’ai finalement résolu ça. J’ai compris que l’on peut utiliser needs tout comme pour d’autres objets :

Indice ici :

Code final :

  needs.site(cloneJSON(siteFixtures["country_codes.json"]));
3 « J'aime »

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