Na de presentatie van Lendude op Drupal Dev Days 2022, werd ik geïnspireerd om voor het eerst een Drupal core test bij te dragen. Dit artikel is een samenvatting van die ervaring.

Waar moet ik beginnen?

Uit de presentatie haalde ik deze tips voor beginners:

  • Voordat je begint, zorg ervoor dat je testen lokaal kunt draaien.
  • Begin met een FunctionalJavascript test omdat die het makkelijkst te begrijpen zijn.
  • Vraag om hulp bij het vinden van een probleem (waar je test(s) voor nodig hebt).
  • Vind het wiel niet opnieuw uit. Begin met bestaande test(s).

We gaan ervan uit dat de lezer weet hoe je lokaal testen uitvoert. Zo niet, dan zijn er veel artikelen over hoe dit te doen. Je kunt dit lokaal doen of je kunt een docker gebaseerde oplossing gebruiken zoals DDEV.

Voor een oplossing met DDEV kijk op https://mglaman.dev/blog/running-drupals-phpunit-test-suites-ddev .

Dit is waarom Drupal evenementen belangrijk zijn.
Stef De Waele
 / 
Head of Drupal bij Calibrate
Stef De Waele

Op zoek naar een kandidaat

Voor mij persoonlijk, zou het moeilijkste deel het vinden van een probleem zijn. Ik ben blij dat ik Lendude kon bezoeken in een sprint room op Drupal Dev Days om me hiermee te helpen. Dit is waarom Drupal-evenementen belangrijk zijn. Een andere optie is om de Drupal slack te bezoeken. Specifiek, het bugsmash kanaal. Vraag daar om hulp en je zult zien dat Drupal mensen heel benaderbaar zijn.

Lendude vroeg met welk deel van Drupal ik vertrouwd ben. Ik heb veel met views gedaan, dus daar zijn we mee begonnen. We hebben core issues opgezocht voor de views_ui component met de tag 'needs tests'.

Ik ging door de issues heen om er een te vinden die ik kon begrijpen, ALLEEN een test nodig had en waar die test een FunctionalJavascript test kan zijn. Ik eindigde met Funky code in Views UI om Add display list niet te laten werken in niet-Engelse talen .

Drupal.org issue 2807241

Je hebt een probleem gevonden, wat nu?

Eerst moet je het probleem begrijpen. Lees de beschrijving van het probleem.

OK, dus de test moet naar een weergave in het Hongaars gaan en een nieuwe weergave toevoegen. Wanneer je dit doet, moet de visuele Hongaarse vertaling alleen het displaytype bevatten en niet de Hongaarse vertaling voor "toevoegen".

Dus, wat heb ik nodig:

  • Een weergave die bezocht kan worden
  • Een gebruiker die de weergave kan bewerken
  • Zowel Engels als Hongaars geïnstalleerd
  • Enkele Hongaarse vertalingen

De test

Nu het duidelijk is wat de test moet doen, zoeken we naar bestaande tests die hebben wat we nodig hebben.

Ik vond

Dit geeft me het grootste deel van de logica die ik nodig heb om de test te schrijven.

Ik besloot om DisplayTest te updaten omdat we de views_ui module aan het testen zijn. Tijdens het maken van de test, verwijderde ik tijdelijk alle bestaande tests in die klasse en behield alleen mijn test functie. Op die manier kon ik tijdens het ontwikkelen van de test alleen mijn test uitvoeren.

Mijn test eindigde als volgt:

public function testAddDisplayBlockTranslation() {

  // Set up an additional language (Hungarian).
  $langcode = 'hu';
  ConfigurableLanguage::createFromLangcode($langcode)->save();
  $config = $this->config('language.negotiation');
  $config->set('url.prefixes', [$langcode => $langcode])->save();
  \Drupal::service('kernel')->rebuildContainer();
  \Drupal::languageManager()->reset();

  // Add Hungarian translations.
  $this->addTranslation($langcode, 'Block', 'Blokk');
  $this->addTranslation($langcode, 'Add @display', '@display hozzáadása');

  $this->drupalGet('hu/admin/structure/views/view/test_display');
  $page = $this->getSession()->getPage();

  $page->find('css', '#views-display-menu-tabs .add')->click();

  // Wait for the animation to complete.
  $this->assertSession()->assertWaitOnAjaxRequest();

  // Look for the input element, always in second spot.
  $elements = $page->findAll('css', '.add ul input');
  $this->assertEquals('Blokk', $elements[1]->getAttribute('value'));

}

Drupal test bot bevestiging

Op dit punt werd ik eraan herinnerd dat

  • Het duurt ongeveer 1,5 uur om alle Drupal core testen uit te voeren.
  • De test bot doet wat validatie voordat het eigenlijke testen begint.

Ik ben op zoek gegaan en de controles zijn hier te vinden:

De volledige lijst:

  • Spellingcontrole.
  • Bestands modi.
  • Geen veranderingen in core/node_modules directory.
  • PHPCS controleert PHP en YAML bestanden.
  • ESLint controleert JavaScript en YAML bestanden.
  • Controleert of .es6.js en .js bestanden gelijkwaardig zijn.
  • Stylelint controleert CSS bestanden.
  • Controleert of .pcss.css- en .css-bestanden gelijkwaardig zijn.

We zijn er bijna

Als je iets bijdraagt met een test, moet je een patch maken met alleen de test. Dit zou moeten resulteren in een falende test. En dan met de fix toegepast, zou dezelfde test groen moeten zijn.

Als je patch klaar is, moet hij worden beoordeeld door de gemeenschap.

Als je het momentum niet wilt verliezen. Benader een collega om je patch te reviewen of ga naar het Drupal slack kanaal bugsmash om te vragen om een review swap.

Ik kreeg wat feedback, heb de patch aangepast en de patch werd goedgekeurd! Je kunt de core commit hier vinden.

Meer tech labs