在插件的前端测试中,是否可以覆盖Site对象及其自己的fixture?

我目前正在处理这个 PR:FIX: presenting formatted location on User Card by merefield · Pull Request #73 · merefield/discourse-locations · GitHub

我正试图用一个新的前端测试来覆盖这个更改。

但由于缺少一个必需的数据属性,测试无法运行。

我遇到的问题是如何使用此处保存的夹具成功覆盖 Site 中的数据:

其中包含 Locations 插件存在时 Site 的附加属性。

…并使其在整个测试中持久存在!

新测试在这里。

我似乎成功地用夹具加载了 Site。

在浏览器中运行 qunit 时,我会在这个调试点停止,并且可以确定它已正确加载:

  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

但当用户卡片被点击时,数据并非如你所料,而且关键是 country_codes 属性丢失了,所以测试在这里停滞不前:

为什么我覆盖的 Site 数据会丢失?

1 个赞

好的,这真令人沮丧。

看起来 Site 对象的值是在这里设置的:

并且无法被覆盖?

我通过修改核心中的 fixture(在这里:https://github.com/discourse/discourse/blob/93a4012ecb3af7306de0c51283d6dd2b2e90818c/app/assets/javascripts/discourse/tests/fixtures/site-fixtures.js)来检查了这一点,它能够识别我的修改。

但我不想要那样,我希望在我的插件测试中用存储在我插件中的 fixture 来覆盖它。

重申一下,我能够在测试 代码 的范围内做到这一点,但一旦插件代码运行,范围似乎会拾取与核心测试助手加载的 fixture 相关的 site 对象……

:thinking:

我终于解决了这个问题。发现你可以像使用其他对象一样使用 needs

线索在这里:

最终代码:

  needs.site(cloneJSON(siteFixtures["country_codes.json"]));
3 个赞

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