Le point d'arrêt ne fonctionne pas lors de l'exécution de Rails Minitest dans Ruby Test Explorer

Contexte

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.

Ruby with VSCode.png

Chiffre attendu qui semble être une telle image

problème

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.

VSCode Breakpoint.png

Cause?

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.

essai et erreur

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.

Avec des variables d'environnement ...

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.

Si le processus n'est pas bon, utilisez le fil

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

Je pensais que Thread devrait fonctionner sur le même RubyVM ... mais apparemment cela ne fonctionne pas.

Mesures temporaires

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

Le point d'arrêt ne fonctionne pas lors de l'exécution de Rails Minitest dans Ruby Test Explorer
[Débutant] Lorsque les rails ne fonctionnent pas
Erreur lors de l'installation de l'ensemble lors de l'exécution de rails neufs
Tutoriel Ruby on Rails Remarques gênantes lors de l'exécution sous Windows
[Ruby on Rails] Lorsque l'acquisition de l'identifiant du paramètre ne s'est pas bien déroulée
ruby get.chomp.to_i ne fonctionne pas, ne se charge pas
Puma --Nignx est une voie de sortie lorsque les rails s -e production -d ne fonctionnent pas dans l'environnement
Encodage lors de l'accès à Windows + Ruby
Ruby on Rails compatible japonais-anglais i18n
[Rails5] Rspec -Test d'unité lors de l'imbrication-
Méthodes Ruby souvent utilisées dans Rails