로컬에서 직접 테스트해 봤습니다. 몇 가지 요인이 작용하는 것 같습니다:
참고하고 계신 siteSettings 객체는 초기화 프로그램(initializer)에 의해 가져와지며, 이후 modifyClass 호출에서 사용됩니다:
초기화 프로그램은 각 테스트마다 다시 실행됩니다. 문제는 이전 테스트에서 수행된 modifyClass 호출을 '초기화(reset)'할 방법이 없다는 것입니다. 우리의 해결책은 pluginId 파라미터입니다. 이는 전체 테스트 스위트에서 첫 번째 modifyClass 호출만 실제로 사용됨을 의미합니다. 이후 테스트의 초기화 프로그램에서 modifyClass를 호출해도 무시됩니다.
일반적으로는 문제가 되지 않습니다. modifyClass 호출 내부의 코드는 테스트 실행마다 변경되지 않는 경향이 있기 때문입니다. 그러나 이 경우 초기화 프로그램의 스코프에서 siteSettings 참조를 사용하고 있습니다.
요약하자면: 테스트 환경에서 이 구현 방식은 modifyClass가 가장 먼저 실행된 테스트의 사이트 설정에 고정되어 있게 됩니다.
해결책은 ‘초기화’ 시점이 아닌 '실행 시(runtime)'에 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 &&