我目前正在处理这个 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")

但当用户卡片被点击时,数据并非如你所料,而且关键是 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 对象……

我终于解决了这个问题。发现你可以像使用其他对象一样使用 needs:
线索在这里:
最终代码:
needs.site(cloneJSON(siteFixtures["country_codes.json"]));
3 个赞
system
(system)
关闭
4
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.