Une extension qui gère les tests automatisés VS Code est l'interface utilisateur de l'Explorateur de tests (https://marketplace.visualstudio.com/items?itemName=hbenl.vscode-test-explorer). L'adaptateur pour ruby de cette extension est Ruby Test Explorer, qui peut gérer rspec et minitest.
Il existe également une extension appelée Ruby qui vous permet d'utiliser Breakpoint et l'exécution d'étapes pour Ruby.
Ce backend est réalisé par les gemmes ruby-debug-ide
et debase
.
Ruby Test Explorer utilise "Ruby" comme extension pour piloter l'icône de débogage.
Chiffre attendu qui semble être une telle image
Le point d'arrêt ne fonctionne pas lors de l'exécution d'un test à partir d'une vue dans l'interface utilisateur de l'Explorateur de tests pour un minitest généré automatiquement par Rails. Dans un peu plus de détails, le point d'arrêt fonctionne dans le contexte (principal) du fichier de test, mais pas dans le bloc de test.
Par défaut, le minitest lors de l'exécution de nouveaux rails est un test parallèle.
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) # <=ici! !!
# 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
Selon Rails Guide Par exemple, il semble que cela se fasse dans DRb et s'exécute sur différentes instances RubyVM. Si la compréhension de la figure précédente est correcte, ce sera un autre RubyVM = ruby-debug-ide sera une VM pour laquelle debase n'est pas défini, donc le point d'arrêt ne fonctionnera pas.
Je veux dire, le contrôleur devrait avoir quelques tests Dans le journal de Ruby Test Explorer, il semble que des informations telles que 0 succès dans tous les cas 0 soient renvoyées.
Si possible, je veux que "la parallélisation fonctionne lors de l'exécution normale à partir de l'Explorateur de tests, et fonctionne comme un seul lors de l'exécution du débogage". Cependant, il était difficile de dire à partir de la conclusion.
Par exemple, il y a un paramètre pour spécifier la commande à donner, donc j'ai pensé qu'elle pouvait être commutée avec une variable d'environnement ...
parallelize(workers: :number_of_processors) unless ENV['TEST_SERIAL'].present?
{
"rubyTestExplorer.minitestCommand": "TEST_SERIAL=1 ./bin/rake"
}
Ceci spécifie la commande pour une exécution normale, Lorsque j'exécute l'icône de débogage, le résultat ressemble à ceci:
[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'
...
Malheureusement, Ruby Test Explorer ne peut pas personnaliser les commandes lors du débogage.
parallelize(workers: :number_of_processors, with: :threads)
Je pensais que Thread devrait fonctionner sur le même RubyVM ... mais apparemment cela ne fonctionne pas.
Après tout, la solution est d'abandonner complètement l'exécution parallèle.
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