article | version |
---|---|
OS | Mac Catalina 10.15.6 |
Visual Studio Code | 1.49.0 |
Ruby | 2.7.1 |
J'utilisais rbenv pour le contrôle de version Ruby
Les gemmes nécessaires au débogage ont été ajoutées au Gemfile et étaient déjà installées
gem "ruby-debug-ide"
gem "debase"
Sélectionnez Exécuter sur le côté gauche de Visual Studio Code et sélectionnez Ajouter une configuration-> RSpec - fichier de spécification active uniquement
Lorsque j'ai débogué avec les paramètres ci-dessus, la barre d'état en bas de l'écran est restée orange indiquant qu'elle était en cours d'exécution, et rien n'a progressé.
ReRun renvoie l'erreur suivante dans la vue [OUTPUT] comme illustré ci-dessous.
Uncaught exception: /Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected tSTRING_BEG, expecting do or '{' or '('
[ -n "$RBENV_DEBUG" ] && set -x
^
/Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected ']', expecting end-of-input
[ -n "$RBENV_DEBUG" ] && set -x
^
/Users/pldb/.rbenv/versions/2.6.6/bin/rdebug-ide:23:in `load': /Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected tSTRING_BEG, expecting do or '{' or '(' (SyntaxError)
[ -n "$RBENV_DEBUG" ] && set -x
^
/Users/pldb/.rbenv/shims/rspec:3: syntax error, unexpected ']', expecting end-of-input
[ -n "$RBENV_DEBUG" ] && set -x
^
from /Users/pldb/.rbenv/versions/2.6.6/bin/rdebug-ide:23:in `<main>'
Changement de .vscode / launch.json comme suit
** Changer avant **
{
"version": "0.2.0",
"configurations": [
{
"name": "RSpec - active spec file only",
"type": "Ruby",
"request": "launch",
"program": "/Users/pldb/.rbenv/shims/rspec",
"args": [
"-I",
"${workspaceRoot}",
"${file}"
]
}
]
}
** Après changement **
{
"version": "0.2.0",
"configurations": [
{
"name": "RSpec - active spec file only",
"type": "Ruby",
"request": "launch",
"program": "${workspaceRoot}/bin/rspec",
"args": [
"-I",
"${workspaceRoot}",
"${file}"
]
}
]
}
Il s'agit du paramètre par défaut de Visual Studio Code Cependant, j'ai utilisé binstub
Le " programme "
au moment où launch.json a été généré était " $ {workspaceRoot} / bin / rspec "
Cependant, j'ai pensé que le chemin de rspec utilisé était correct et l'ai remplacé par le chemin suivant
% which rspec
/Users/pldb/.rbenv/shims/rspec
L'erreur de titre a été causée par ceci
C'est le contenu de la rspec sous shims qui était en fait référencé
#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x
program="${0##*/}"
if [ "$program" = "ruby" ]; then
for arg; do
case "$arg" in
-e* | -- ) break ;;
*/* )
if [ -f "$arg" ]; then
export RBENV_DIR="${arg%/*}"
break
fi
;;
esac
done
fi
export RBENV_ROOT="/Users/pldb/.rbenv"
exec "/usr/local/Cellar/rbenv/1.1.2/libexec/rbenv" exec "$program" "$@"
Il s'agit d'un fichier bash généré par rbenv (pour référencer rspec), et la lecture de ce fichier car il a généré une erreur. En d'autres termes, c'était parce que je ne comprenais pas complètement rspec.
Utiliser binstub
Référence: [Traduction + Explication] Comprendre binstub: Comportement de RubyGems, rbenv, bundler
Générez $ {workspaceRoot} / bin / rspec
dans binstub pour en faire la rspec à utiliser dans votre projet
$ {workspaceRoot}
pointe vers un dossier dans le répertoire extrait avec Visual Studio Code
Accédez à ce répertoire et procédez comme suit
% bundle binstubs rspec-core
% ./bin/rspec -v
RSpec 3.9
- rspec-core 3.9.2
- rspec-expectations 3.9.2
- rspec-mocks 3.9.1
- rspec-support 3.9.3
Vous pouvez maintenant exécuter avec les paramètres par défaut
Évitez les dossiers bin (pour ne pas affecter les autres contributeurs) si vous créez une gemme
% bundle binstubs rspec-core --path exe
% ./exe/rspec -v
RSpec 3.9
- rspec-core 3.9.2
- rspec-expectations 3.9.2
- rspec-mocks 3.9.1
- rspec-support 3.9.3
Dans ce cas, le chemin de " programme "
dans launch.json sera $ {workspaceRoot} / exe / rspec
Si vous ne vous souciez pas de la version de rspec dans votre projet, cela fonctionne même si vous spécifiez / usr / local / bin / rsepc
comme suit:
{
"version": "0.2.0",
"configurations": [
{
"name": "RSpec - active spec file only",
"type": "Ruby",
"request": "launch",
"program": "/usr/local/bin/rspec",
"args": [
"-I",
"${workspaceRoot}",
"${file}"
]
}
]
}
Et c'est une autre question, mais je couvrirai une autre chose à propos de la configuration de launch.json. Une erreur d'encodage s'est produite dans gemspec
Uncaught exception:
[!] There was an error parsing `Gemfile`:
[!] There was an error while loading `xxx.gemspec`: invalid byte sequence in US-ASCII. Bundler cannot continue.
Comme vous pouvez le voir, c'est dû aux paramètres d'encodage
Référence: Problème d'encodage lors de l'utilisation de gem'xcodeproj '
Le launch.json lors du débogage pendant le développement de gem ressemble finalement à ceci:
{
"version": "0.2.0",
"configurations": [
{
"name": "RSpec - active spec file only",
"type": "Ruby",
"request": "launch",
"program": "${workspaceRoot}/exe/rspec",
"args": [
"-I",
"${workspaceRoot}",
"${file}"
],
"env": {
"LANG": "en_US.UTF-8",
"LC_COLLATE": "en_US.UTF-8",
"LC_CTYPE": "en_US.UTF-8",
"LC_MESSAGES": "en_US.UTF-8",
"LC_MONETARY": "en_US.UTF-8",
"LC_NUMERIC": "en_US.UTF-8",
"LC_TIME": "en_US.UTF-8",
"LC_ALL": "en_US.UTF-8"
}
}
]
}
Recommended Posts