ローカルでこれを試してみました。いくつかの要因が関係しているようです。
参照している 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 &&