it-swarm.com.de

Wie speichere ich Variablen auf dem Bildschirm, wenn ich PHPUnit-Tests ausführe?

Ich versuche, einige PHPUnit-Tests in Drupal 8.) zusammenzustellen. Ich führe die Tests über die Befehlszeile mit/vendor/bin/phpunit aus, habe aber Probleme, dies herauszufinden So speichern Sie eine Variable zu Debugging-Zwecken auf dem Bildschirm.

Im Übrigen benutze ich Folgendes:

$this->assertEquals(2, $this->currentUser->id(), 'ID is correct');

Wenn dies erfolgreich ist, wird die Meldung "ID ist korrekt" in der Konsole nicht angezeigt. Weiß jemand, wie man die Fehlermeldungen richtig anzeigt?

4
Jaypan

Neuere Versionen von PHPUnit schlucken die Ausgabe. Um dies zu umgehen, müssen Sie mit dem --debug flag, z

$ ../vendor/bin/phpunit --debug modules/migrate/tests/src/Unit/process/FormatDateTest.php

Dann können Sie die gedruckte Ausgabe sehen.

Beachten Sie auch, dass PHPUnit Tests mit Ausgabe in ihnen mit der Standarddatei phpunit.xml überspringt, da es sie als riskant erachtet. Um dieses Update zu vermeiden, wird das beStrictAboutOutputDuringTests="false" Einstellung und Ihre Tests werden ausgeführt.

Sie können auch das $message Parameter, um etwas auszugeben, wenn ein Assertion fehlschlägt.

7
mpdonadio

Nun, ich habe eine Lösung gefunden, die funktioniert. Ich bin mir nicht sicher, ob es der beste Weg ist, es zu tun, aber tatsächlich scheint es so, als ob es wahrscheinlich so ist, wie es gemacht werden soll.

Zuerst habe ich festgestellt, dass die Assertionsnachricht zwar nicht für erfolgreiche Assertions ausgegeben wird, aber für Fehler. So können Sie Ihren Wert an die Bestätigungsnachricht anhängen, um zu sehen, was es ist:

$b = 'some other value';
$this->assertEquals('some value', $b, '$b is not equal to "some value", instead it is instead: ' . $b);

Da 'irgendein Wert' nicht gleich 'irgendein anderer Wert' ist, lautet die Ausgabe:

$ b ist nicht gleich "irgendein Wert", sondern: irgendein anderer Wert

3
Jaypan
$this->assertEquals('some arbitrary value', print_r($thing_i_want_to_see, TRUE));

Dies führt dazu, dass die Zusicherung fehlschlägt und zeigt Ihnen den Unterschied zwischen Ihrem 'beliebigen Wert' und dem tatsächlichen Wert. Sie können dann den tatsächlichen Wert lesen. Achten Sie auf komplexe und rekursive Datenstrukturen.

Sie können auch error_log() ausführen und Ihre Protokolldatei ansehen, aber Drupal Funktionstests verschlucken dies. Funktioniert jedoch hervorragend für Komponententests.

2
paul-m

Ich habe einen schwierigen Anfang gemacht, damit Symfony's Befehl dump () in Tests funktioniert. Es gibt einen Patch unter https://www.drupal.org/node/2795567 , obwohl ich nicht sicher bin, wie ich ihn weiterentwickeln soll.

1
joachim

Es scheint fast unmöglich, eine Ausgabe auf dem Bildschirm anzuzeigen. Jaypans Antwort funktioniert, ist aber nicht gut, wenn Sie eine Ausgabe aus einer Datei schreiben möchten, die BrowserTestBase nicht erweitert.

dd () kann auch nicht in /tmp/drupal_debug.txt ausgegeben werden, daher habe ich meine eigene Funktion geschrieben:

if(!function_exists('mylog')) {
  function mylog($var, $label = NULL) {

    $tmp_file = '/tmp/my_debug.log';

    $output = '';
    if(!is_null($label)) {
      $output = $label . ': ';
    }

    $output .= print_r($var, 1) . PHP_EOL;

    file_put_contents($tmp_file, $output, FILE_APPEND);
  }
}

Ich füge dies in jede Datei ein, die ich zum Erstellen einer Debug-Ausgabe benötige, und schließe dann einfach /tmp/my_debug.log.

1
Felix Eve