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.
Erwartete Figur, die so ein Bild zu sein scheint
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.
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.
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.
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.
parallelize(workers: :number_of_processors, with: :threads)
Ich dachte, dass Thread auf derselben RubyVM funktionieren sollte ... aber anscheinend funktioniert es nicht.
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