Puncte:1

Testare funcțională - Schemă Excepție incompletă lipsește schema

drapel id

Lucrez la primul meu test funcțional pentru un modul personalizat. De fiecare dată când rulez testul funcțional primesc erori care se ocupă de problemele cu schema de configurare. Cu toate acestea, sunt confuz de mesajul de eroare.

Comanda

phpunit modules/custom/worx_blog

Mesaj de eroare

Erori de schemă pentru editor.editor.full_html cu următoarele erori:

editor.editor.full_html:settings.plugins.linkit lipsește schema

Modulul meu Conifg - Modulul Fișier Conifg

Dacă te uiți la fișier, poți vedea că linkit intrarea este acolo. Deci nu știu ce înseamnă prin lipsă.

miststudent2011 avatar
drapel fr
Trebuie să adăugați fișierul schema.yml ceva de genul acesta https://git.drupalcode.org/sandbox/Bhanu951-3103712/-/blob/8.x-dev/testing_examples/config/schema/testing_examples.schema.yml
Puncte:1
drapel us

La fel de API de configurare spune, fiecare modul trebuie să-și definească schema de configurare în fișierele din directorul config/schema din directorul modulului de nivel superior. Acesta este folosit de core Drupal pentru a valida fișierul de configurare și pentru a verifica că nu este corupt.

De exemplu, modulul Book folosește următoarea schemă, pentru obiectul său de configurare (core/modules/book/config/schema/book.schema.yml).

# Schema pentru fișierele de configurare ale modulului de carte.

setări.carte:
  tip: config_object
  etichetă: „Setări de carte”
  cartografiere:
    tipuri_permise:
      tip: secvență
      etichetă: „Tipuri de conținut permise în contururile cărților”
      secvenţă:
        tip: sfoară
        etichetă: „Tipul de conținut”
    bloc:
      tip: cartografiere
      etichetă: „Blocați”
      cartografiere:
        navigare:
          tip: cartografiere
          etichetă: „Navigație”
          cartografiere:
            modul:
              tip: sfoară
              etichetă: „Mod”
    tip_copil:
      tip: sfoară
      etichetă: „Tipul de conținut pentru paginile secundare”

block.settings.book_navigation:
  tip: block_settings
  etichetă: „Bloc de navigare pentru carte”
  cartografiere:
    block_mode:
      tip: sfoară
      etichetă: „Blocați modul de afișare”

Acesta este diferit de fișierul său de configurare, care se află în core/modules/book/config/installbook.settings.yml.

tipuri_permise:
  - carte
bloc:
  navigare:
    modul: „toate paginile”
tip_copil: carte

Codul care aruncă acea excepție este conținut în ConfigSchemaChecker clasă, folosită pentru a implementa un abonat de eveniment care este invocat atunci când un obiect de configurare este salvat.

  funcția publică onConfigSave(ConfigCrudEvent $event) {
    // Validează configurația doar dacă se află în colecția implicită. Alte
    // colecțiile pot avea o configurație incompletă (de exemplu limba
    // suprascrie numai). Acestea nu sunt valabile în sine.
    $saved_config = $event->getConfig();
    dacă ($saved_config->getStorage()->getCollectionName() != StorageInterface::DEFAULT_COLLECTION) {
      întoarcere;
    }
    $nume = $config_salvat->getName();
    $date = $saved_config->get();
    $checksum = Crypt::hashBase64(serialize($date));
    if (!in_array($nume, $this->exclude) && !isset($this->checked[$name . ':' . $checksum])) {
      $this->bifat[$name . ':' . $checksum] = TRUE;
      $erori = $this->checkConfigSchema($this->typedManager, $name, $data);
      dacă ($erori === FALSE) {
        throw new SchemaIncompleteException("Nici o schemă pentru {$nume}");
      }
      elseif (este_matrice($erori)) {
        $text_errors = [];
        foreach ($erori ca $key => $eroare) {
          $text_errors[] = nou FormattableMarkup('@key @error', [
            '@key' => $key,
            '@error' => $eroare,
          ]);
        }
        throw new SchemaIncompleteException("Erori de schemă pentru {$name} cu următoarele erori: " . implode(', ', $text_errors));
      }
    }
  }
drapel id
În acest caz, cum se face că primesc doar o schemă lipsă pentru anumite intrări din config/install/ymls și nu pentru fiecare intrare?
apaderno avatar
drapel us
Deoarece clasa [`ConfigSchemaChecker`](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Config%21Development%21ConfigSchemaChecker.php/class/ConfigSchemaChecker/9.3.x) nu verificați fiecare intrare și handlerul său de evenimente este invocat numai atunci când un obiect de configurare este salvat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.