Der Haltepunkt funktioniert nicht, wenn Rails Minitest im Ruby Test Explorer ausgeführt wird

Hintergrund

Test Explorer UI ist eine Erweiterung, die das automatisierte Testen von VSCode verwaltet. Der Adapter für Ruby dieser Erweiterung ist Ruby Test Explorer, der rspec und minitest verarbeiten kann.

Es gibt auch eine Erweiterung namens Ruby, mit der Sie die Haltepunkt- und Schrittausführung für Ruby verwenden können. Dieses Backend wird durch die Edelsteine "Ruby-Debug-Ide" und "Debase" realisiert.

Ruby Test Explorer verwendet "Ruby" als Erweiterung, um das Debug-Symbol zu steuern.

Ruby with VSCode.png

Erwartete Figur, die so ein Bild zu sein scheint

Problem

Der Haltepunkt funktioniert nicht, wenn ein Test in einer Ansicht in der Benutzeroberfläche des Test-Explorers für einen von Rails automatisch generierten Minitest ausgeführt wird. Etwas detaillierter funktioniert der Haltepunkt im (Haupt-) Kontext der Testdatei, jedoch nicht im Testblock.

VSCode Breakpoint.png

Ursache?

Standardmäßig ist der Mindesttest, wenn neue Schienen ausgeführt werden, ein paralleler Test.

test/test_helper.rb


ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment'
require 'rails/test_help'

class ActiveSupport::TestCase
  # Run tests in parallel with specified workers
  parallelize(workers: :number_of_processors) # <=Hier! !!

  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

Rails Guide Es scheint beispielsweise, dass dies in DRb erfolgt und auf verschiedenen RubyVM-Instanzen ausgeführt wird. Wenn das Verständnis der vorherigen Abbildung korrekt ist, handelt es sich um eine andere RubyVM = ruby-debug-ide ist eine VM, für die kein Debase festgelegt ist, sodass der Haltepunkt nicht funktioniert.

Ich meine, der Controller sollte ein paar Tests haben Im Protokoll von Ruby Test Explorer werden anscheinend Informationen wie 0 Erfolge in allen 0 Fällen zurückgegeben.

Versuch und Irrtum

Wenn möglich, möchte ich "Parallelisieren funktioniert, wenn es normal im Test Explorer ausgeführt wird, und funktioniert als Single, wenn Debug ausgeführt wird". Es war jedoch schwierig, aus der Schlussfolgerung zu sagen.

Mit Umgebungsvariablen ...

Zum Beispiel gibt es eine Einstellung, um den zu erteilenden Befehl anzugeben, daher dachte ich, dass er mit einer Umgebungsvariablen umgeschaltet werden könnte ...

  parallelize(workers: :number_of_processors) unless ENV['TEST_SERIAL'].present?
{
  "rubyTestExplorer.minitestCommand": "TEST_SERIAL=1 ./bin/rake"
}

Dies gibt den Befehl für die normale Ausführung an. Wenn ich das Debug-Symbol ausführe, sieht das Ergebnis folgendermaßen aus:

[2020-11-06 17:34:09.425] [INFO] Debugging test(s) ["controllers"] of /.................
[2020-11-06 17:34:09.425] [INFO] Running Ruby tests ["controllers"]
[2020-11-06 17:34:09.425] [INFO] Starting the debug session
[2020-11-06 17:34:09.426] [INFO] Running test file: /............../test/controllers/posts_controller_test.rb
[2020-11-06 17:34:09.426] [INFO] Running command: rdebug-ide --host 127.0.0.1 --port 1234 -- $EXT_DIR/debug_minitest.rb 'test/controllers/posts_controller_test.rb'
...

Leider kann Ruby Test Explorer Befehle beim Debuggen nicht anpassen.

Wenn der Prozess nicht gut ist, verwenden Sie Thread

parallelize(workers: :number_of_processors, with: :threads)

Ich dachte, dass Thread auf derselben RubyVM funktionieren sollte ... aber anscheinend funktioniert es nicht.

Vorübergehende Maßnahmen

Schließlich besteht die Lösung darin, die parallele Ausführung vollständig aufzugeben.

test/test_helper.rb


ENV['RAILS_ENV'] ||= 'test'
require_relative '../config/environment'
require 'rails/test_help'

class ActiveSupport::TestCase
  # Run tests in parallel with specified workers
  # parallelize(workers: :number_of_processors) # <= comment out or delete this line.

  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
  fixtures :all

  # Add more helper methods to be used by all tests here...
end

Recommended Posts

Der Haltepunkt funktioniert nicht, wenn Rails Minitest im Ruby Test Explorer ausgeführt wird
[Anfänger] Wenn Schienen nicht funktionieren
Fehler bei der Bundle-Installation beim Ausführen neuer Schienen
Ruby on Rails-Lernprogramm Problematische Hinweise unter Windows
[Ruby on Rails] Wenn die ID-Erfassung des Parameters nicht gut lief
ruby get.chomp.to_i funktioniert nicht, lädt nicht
Puma --Nignx ist ein Fluchtweg, wenn die Schienen in der Umgebung nicht funktionieren
Codierung unter Windows + Ruby
Ruby on Rails Japanisch-Englisch kompatibler i18n
[Rails5] Rspec -Einheitentest beim Verschachteln-
Ruby-Methoden, die häufig in Rails verwendet werden