奇妙な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