Рейтинг:1

Функциональное тестирование — схема неполная Исключение отсутствует схема

флаг id

Я работаю над своим первым функциональным тестом для пользовательского модуля. Каждый раз, когда я запускаю функциональный тест, я получаю ошибки, связанные с проблемами схемы конфигурации. Однако меня смущает сообщение об ошибке.

Команда

Модули phpunit/пользовательские/worx_blog

Сообщение об ошибке

Ошибки схемы для editor.editor.full_html со следующими ошибками:

editor.editor.full_html:settings.plugins.linkit отсутствует схема

Конфигурация моего модуля - Файл конфигурации модуля

Если вы посмотрите на файл, то увидите, что ссылка вход есть. Так что я не знаю, что это значит, когда он отсутствует.

miststudent2011 avatar
флаг fr
Вам нужно добавить файл schema.yml примерно так https://git.drupalcode.org/sandbox/Bhanu951-3103712/-/blob/8.x-dev/testing_examples/config/schema/testing_examples.schema.yml
Рейтинг:1
флаг us

Как API конфигурации говорит, что каждый модуль должен определить свою схему конфигурации в файлах в каталоге config/schema в каталоге модуля верхнего уровня. Это используется ядром Drupal для проверки файла конфигурации и проверки того, что он не поврежден.

Например, модуль Book использует следующую схему для своего объекта конфигурации (core/modules/book/config/schema/book.schema.yml).

# Схема конфигурационных файлов книжного модуля.

книга.настройки:
  тип: config_object
  label: 'Настройки книги'
  сопоставление:
    разрешенные_типы:
      тип: последовательность
      label: 'Типы контента, разрешенные в планах книг'
      последовательность:
        тип: строка
        label: 'Тип контента'
    блокировать:
      тип: отображение
      метка: «Заблокировать»
      сопоставление:
        навигация:
          тип: отображение
          этикетка: 'Навигация'
          сопоставление:
            Режим:
              тип: строка
              метка: 'Режим'
    дочерний_тип:
      тип: строка
      label: 'Тип контента для дочерних страниц'

block.settings.book_navigation:
  тип: block_settings
  label: 'Блок навигации по книге'
  сопоставление:
    блок_режим:
      тип: строка
      label: 'Блокировать режим отображения'

Это отличается от его файла конфигурации, который находится в core/modules/book/config/installbook.settings.yml.

разрешенные_типы:
  - книга
блокировать:
  навигация:
    режим: «все страницы»
child_type: книга

Код, вызывающий это исключение, содержится в ConfigSchemaChecker класс, используемый для реализации подписчика событий, который вызывается при сохранении объекта конфигурации.

  общедоступная функция onConfigSave (ConfigCrudEvent $event) {
    // Проверять конфигурацию, только если она находится в коллекции по умолчанию. Другой
    // коллекции могут иметь неполную конфигурацию (например, язык
    // только переопределения). Они недействительны сами по себе.
    $saved_config = $event->getConfig();
    if ($saved_config->getStorage()->getCollectionName() != StorageInterface::DEFAULT_COLLECTION) {
      возвращаться;
    }
    $name = $saved_config->getName();
    $data = $saved_config->get();
    $checksum = Crypt::hashBase64(serialize($data));
    if (!in_array($name, $this->exclude) && !isset($this->checked[$name . ':' . $checksum])) {
      $this->checked[$name . ':' . $контрольная сумма] = ИСТИНА;
      $errors = $this->checkConfigSchema($this->typedManager, $name, $data);
      если ($ ошибки === ЛОЖЬ) {
        выбросить новое исключение SchemaIncompleteException("Нет схемы для {$name}");
      }
      elseif (is_array($errors)) {
        $text_errors = [];
        foreach ($errors as $key => $error) {
          $text_errors[] = new FormattableMarkup('@key @error', [
            '@ключ' => $ключ,
            '@error' => $ошибка,
          ]);
        }
        throw new SchemaIncompleteException("Ошибки схемы для {$name} со следующими ошибками: " .implode(', ', $text_errors));
      }
    }
  }
флаг id
В таком случае, почему я получаю отсутствующую схему только для определенных записей в config/install/ymls, а не для каждой записи?
apaderno avatar
флаг us
Поскольку класс [`ConfigSchemaChecker`](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Config%21Development%21ConfigSchemaChecker.php/class/ConfigSchemaChecker/9.3.x) не проверять каждую запись, и ее обработчик событий вызывается только при сохранении объекта конфигурации.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.