Ruby testen

Alle unten aufgeführten Befehle setzen voraus, dass Sie sie aus dem Verzeichnis build/ ausführen, das während des Erstellens von Ruby erstellt wurde.

Die meisten unten aufgeführten Befehle sollten mit GNU make (Standard unter Linux und macOS), BSD make und NMAKE funktionieren, sofern nicht anders angegeben.

Testsuiten

Es gibt mehrere Testsuiten im Ruby-Codebestand.

Wir können alle Make-Skripte parallel ausführen, um sie zu beschleunigen.

  1. bootstraptest/

    Dies ist eine kleine Testsuite, die auf Miniruby läuft. Wir können sie mit folgenden Befehlen ausführen:

    make btest
    

    Um einzelne Bootstrap-Tests auszuführen, können wir entweder eine Liste von Dateinamen angeben oder das Flag --sets in der Variablen BTESTS verwenden.

    make btest BTESTS="../bootstraptest/test_string.rb ../bootstraptest/test_class.rb"
    make btest BTESTS="--sets=string,class"
    

    Um diese Tests mit ausführlicher Protokollierung auszuführen, können wir -v zu den OPTS hinzufügen.

    make btest OPTS="--sets=string,class -v"
    

    Wenn wir die Bootstrap-Testsuite auf Ruby (nicht Miniruby) ausführen möchten, können wir Folgendes verwenden:

    make test
    

    Um diese Tests mit ausführlicher Protokollierung auszuführen, können wir -v zu den OPTS hinzufügen.

    make test OPTS=-v
    

    (Nur GNU make) Um eine bestimmte Datei auszuführen, können wir Folgendes verwenden:

    make ../test/ruby/test_string.rb

    Sie können die Testoption -n verwenden, um einen bestimmten Test mit einem Regex auszuführen.

    make ../test/ruby/test_string.rb TESTOPTS="-n /test_.*_to_s/"
  2. test/

    Dies ist eine umfassendere Testsuite, die auf Ruby läuft. Wir können sie mit folgenden Befehlen ausführen:

    make test-all
    

    Wir können eine bestimmte Testdatei oder ein bestimmtes Verzeichnis in dieser Suite mit der Option TESTS ausführen, zum Beispiel:

    make test-all TESTS="../test/ruby/"
    make test-all TESTS="../test/ruby/test_string.rb"

    Wir können einen bestimmten Test in dieser Suite mit der Option TESTS ausführen, indem wir zuerst den Dateinamen und dann den Testnamen mit --name davor angeben. Zum Beispiel:

    make test-all TESTS="../test/ruby/test_string.rb --name=TestString#test_to_s"

    Um diese Tests mit ausführlicher Protokollierung auszuführen, können wir -v zu TESTS hinzufügen.

    make test-all TESTS=-v

    Wir können die Hilfe der Option TESTS anzeigen lassen.

    make test-all TESTS=--help

    Wir können alle Tests in test/, bootstraptest/ und spec/ (spec/ wird in einem späteren Abschnitt erklärt) zusammen mit folgendem Befehl ausführen:

    make check
    
  3. spec/ruby

    Dies ist eine Testsuite, die im Ruby-Spec-Repository definiert ist und periodisch in das Verzeichnis spec/ruby dieses Repositorys gespiegelt wird. Sie testet das Verhalten der Ruby-Programmiersprache. Wir können sie mit folgendem Befehl ausführen:

    make test-spec
    

    Wir können eine bestimmte Testdatei oder ein bestimmtes Verzeichnis in dieser Suite mit der Option SPECOPTS ausführen, zum Beispiel:

    make test-spec SPECOPTS="../spec/ruby/core/string/"
    make test-spec SPECOPTS="../spec/ruby/core/string/to_s_spec.rb"

    Um einen bestimmten Test auszuführen, können wir das Flag --example verwenden, um gegen den Testnamen abzugleichen.

    make test-spec SPECOPTS="../spec/ruby/core/string/to_s_spec.rb --example='returns self when self.class == String'"

    Um diese Specs mit ausführlicher Protokollierung auszuführen, können wir -v zu SPECOPTS hinzufügen.

    make test-spec SPECOPTS="../spec/ruby/core/string/to_s_spec.rb -Vfs"

    (Nur GNU make) Um eine Ruby-Spec-Datei oder ein Verzeichnis auszuführen, können wir Folgendes verwenden:

    make ../spec/ruby/core/string/to_s_spec.rb
  4. spec/bundler

    Die Bundler-Testsuite ist im RubyGems-Repository definiert und wird periodisch in das Verzeichnis spec/ruby dieses Repositorys gespiegelt. Wir können sie mit folgendem Befehl ausführen:

    make test-bundler
    

    Um eine bestimmte Bundler-Spec-Datei auszuführen, können wir BUNDLER_SPECS wie folgt verwenden:

    make test-bundler BUNDLER_SPECS=commands/exec_spec.rb

Fehlerbehebung

Ausführen von Testsuiten auf s390x CPU-Architektur

Wenn wir fehlschlagende Tests im Zusammenhang mit der zlib-Bibliothek auf der s390x CPU-Architektur sehen, können wir die Testsuiten mit DFLTCC=0 ausführen, um sie zu bestehen.

DFLTCC=0 make check

Die Fehler können bei der zlib-Bibliothek auftreten, wenn der Patch madler/zlib#410 angewendet wird, um den Deflate-Algorithmus zu aktivieren, der einen anderen komprimierten Byte-Stream erzeugt. Wir verwalten dieses Problem unter [ruby-core:114942][Bug #19909].