Я запустил это локально. Похоже, тут задействовано несколько факторов:
Объект siteSettings, на который вы ссылаетесь, получается инициализатором, а затем используется в вызове modifyClass:
Инициализаторы перезапускаются для каждого теста. Проблема в том, что у нас нет способа «сбросить» любые вызовы modifyClass, сделанные предыдущими тестами. Наше решение — параметр pluginId: он означает, что используется только первый вызов modifyClassво всем наборе тестов. Вызовы modifyClass из инициализаторов в будущих тестах игнорируются.
Обычно это нормально — код внутри вызова modifyClass обычно не меняется при каждом запуске теста. Однако в данном случае вы ссылаетесь на объект siteSettings из области видимости инициализатора.
Коротко: в тестах такая реализация означает, что modifyClass будет «застрявшим» с настройками сайта из того теста, который запустился первым.
Решение — использовать ссылку на siteSettings «во время выполнения», а не «во время инициализации». Мы можем использовать ту, что есть в самом model:composer. Этот дифф позволяет тестам проходить у меня:
Здесь есть ещё одна проблема, которая, как я подозреваю, вызвана той же причиной:
currentUser также определён в инициализаторе.
Если тест с ошибкой запускается вторым, это выражение вычисляется, и переменная больше не определена, поэтому при совместном запуске тесты могут падать в 50% случаев.
Похоже, что в модели Composer есть поле user, поэтому я переключусь на него…