Ist es möglich, das Site-Objekt mit einer eigenen Fixture während Front-End-Tests eines Plugins zu überschreiben?

Ich arbeite gerade an diesem PR: FIX: presenting formatted location on User Card by merefield · Pull Request #73 · merefield/discourse-locations · GitHub

Ich versuche, die Änderung mit einem neuen Front-End-Test abzudecken.

Aber der Test schlägt fehl, weil ein erforderliches Datenattribut nicht definiert ist.

Das Problem, mit dem ich konfrontiert bin, ist, wie ich die Daten in Site erfolgreich mit einer Fixture überschreiben kann, die hier liegt:

die ein zusätzliches Attribut enthält, das Site hat, wenn das Locations Plugin vorhanden ist.

… und es für den Rest des Tests beibehalten!

Der neue Test ist hier.

Ich lade Site scheinbar erfolgreich mit der Fixture.

Ich stoppe an dieser Debugger-Stelle während des QUnit-Laufs im Browser und kann sagen, dass sie korrekt geladen ist:

  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

aber wenn auf die Benutzerkarte geklickt wird, sind die Daten nicht wie erwartet und entscheidend ist, dass das Attribut country_codes fehlt, sodass der Test hier ins Stocken gerät:

Warum gehen meine überschriebenen Site-Daten verloren?

1 „Gefällt mir“

OK, das ist frustrierend.

Es sieht so aus, als ob der Wert des Site-Objekts hier gesetzt wird:

Und kann nicht überschrieben werden?

Ich habe dies überprüft, indem ich die Fixture im Core geändert habe (hier: discourse/app/assets/javascripts/discourse/tests/fixtures/site-fixtures.js at 93a4012ecb3af7306de0c51283d6dd2b2e90818c · discourse/discourse · GitHub) und es übernimmt meine Änderung.

Aber das will ich nicht, ich möchte es in meinem Plugin-Test mit einer Fixture überschreiben, die in meinem Plugin gespeichert ist.

Um es zu wiederholen: Ich kann das für den Geltungsbereich des Test_codes_ tun, aber sobald der Plugin-Code ausgeführt wird, scheint der Geltungsbereich das Site-Objekt zu übernehmen, das sich auf die vom Core-Testhelfer geladene Fixture bezieht …

:thinking:

Ich habe das endlich gelöst. Es stellte sich heraus, dass man needs genauso verwenden kann wie für andere Objekte:

Hinweis hier:

Finaler Code:

  needs.site(cloneJSON(siteFixtures["country_codes.json"]));
3 „Gefällt mir“

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