Я запустил это локально. Похоже, тут задействовано несколько факторов:
Объект siteSettings, на который вы ссылаетесь, получается инициализатором, а затем используется в вызове modifyClass:
Инициализаторы перезапускаются для каждого теста. Проблема в том, что у нас нет способа «сбросить» любые вызовы modifyClass, сделанные предыдущими тестами. Наше решение — параметр pluginId: он означает, что используется только первый вызов modifyClass во всем наборе тестов. Вызовы modifyClass из инициализаторов в будущих тестах игнорируются.
Обычно это нормально — код внутри вызова modifyClass обычно не меняется при каждом запуске теста. Однако в данном случае вы ссылаетесь на объект siteSettings из области видимости инициализатора.
Коротко: в тестах такая реализация означает, что modifyClass будет «застрявшим» с настройками сайта из того теста, который запустился первым.
Решение — использовать ссылку на siteSettings «во время выполнения», а не «во время инициализации». Мы можем использовать ту, что есть в самом model:composer. Этот дифф позволяет тестам проходить у меня:
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 &&