# Странное поведение QUnit?: тест не проходит, потому что установленное значение не сохраняется

**URL:** https://meta.discourse.org/t/strange-qunit-behaviour-test-failing-because-setting-value-doesnt-survive/274165
**Category:** Development
**Created:** [07.Август.2023 10:05:22 UTC](https://meta.discourse.org/t/strange-qunit-behaviour-test-failing-because-setting-value-doesnt-survive/274165 "2023-08-07T10:05:22Z")
**Posts on this page:** 1
**Showing post:** 2

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [07.Август.2023 10:53:24 UTC](https://meta.discourse.org/t/strange-qunit-behaviour-test-failing-because-setting-value-doesnt-survive/274165/2 "2023-08-07T10:53:24Z")

</div>

Я запустил это локально. Похоже, тут задействовано несколько факторов:

Объект `siteSettings`, на который вы ссылаетесь, получается инициализатором, а затем используется в вызове `modifyClass`:

> <https://github.com/merefield/discourse-locations/blob/59525d1d82/assets/javascripts/discourse/initializers/location-edits.js.es6#L13-L18>

> <https://github.com/merefield/discourse-locations/blob/b87a63b547/assets/javascripts/discourse/initializers/location-edits.js.es6#L86-L86>

Инициализаторы перезапускаются для каждого теста. Проблема в том, что у нас нет способа «сбросить» любые вызовы `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 &&

```

---

_[View the full topic](https://meta.discourse.org/t/strange-qunit-behaviour-test-failing-because-setting-value-doesnt-survive/274165)._
