QUnit 奇怪的行为?:测试因设置值不持久而失败

我本地试了一下。看起来有几个因素在起作用:

你引用的 siteSettings 对象是通过初始化程序获取的,然后用于 modifyClass 调用:

初始化程序会为每个测试重新运行。问题是,我们无法“重置”由先前测试所做的任何 modifyClass 调用。我们的解决方案是 pluginId 参数——这意味着整个测试套件中只有第一个 modifyClass 调用会被实际使用。未来测试中的初始化程序对 modifyClass 的调用将被忽略。

这通常没问题——modifyClass 调用中的代码在每次测试运行时通常不会改变。然而,在这种情况下,你引用的是初始化程序作用域中的 siteSettings 引用。

简而言之:在测试中,这种实现意味着 modifyClass 将被固定在运行的第一个测试的站点设置上。

解决方案是使用“运行时”的 siteSettings 引用,而不是“初始化程序”时的引用。我们可以使用 model:composer 本身的引用。这个 diff 使我的测试通过了:

diff --git a/assets/javascripts/discourse/initializers/location-edits.js.es6 b/assets/javascripts/discourse/initializers/location-edits.js.es6
index 19e50c0..9d5f882 100644
--- a/assets/javascripts/discourse/initializers/location-edits.js.es6
+++ b/assets/javascripts/discourse/initializers/location-edits.js.es6
@@ -83,7 +83,7 @@ export default {
         @observes("draftKey")
         _setupDefaultLocation() {
           if (this.draftKey === "new_topic") {
-            const topicDefaultLocation = siteSettings.location_topic_default;
+            const topicDefaultLocation = this.siteSettings.location_topic_default;
             if (
               topicDefaultLocation === "user" &&
               currentUser.custom_fields.geo_location &&
2 个赞