J'ai le fichier suivant:
/spec/controllers/groups_controller_spec.rb
Quelle commande dans le terminal dois-je utiliser pour exécuter uniquement cette spécification et dans quel répertoire dois-je exécuter la commande?
Mon fichier gem:
# Test ENVIRONMENT GEMS
group :development, :test do
gem "autotest"
gem "rspec-rails", "~> 2.4"
gem "cucumber-rails", ">=0.3.2"
gem "webrat", ">=0.7.2"
gem 'factory_girl_rails'
gem 'email_spec'
end
Fichier de spécifications:
require 'spec_helper'
describe GroupsController do
include Devise::TestHelpers
describe "GET yourgroups" do
it "should be successful and return 3 items" do
Rails.logger.info 'HAIL MARRY'
get :yourgroups, :format => :json
response.should be_success
body = JSON.parse(response.body)
body.should have(3).items # @user1 has 3 permissions to 3 groups
end
end
end
ruby-on-rails
ruby
ruby-on-rails-3
rspec
Un apprenti
la source
la source
bundle exec rspec spec --help
vous donnera la réponse:Réponses:
Je ne sais pas combien de temps cela est disponible, mais il existe une configuration Rspec pour le filtrage des exécutions - vous pouvez donc maintenant l'ajouter à votre
spec_helper.rb
:Et puis ajoutez une balise focus au
it
,context
oudescribe
pour exécuter uniquement ce bloc:Documentation RSpec:
https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method
la source
rspec
commandes pour exécuter la spécification avec le paramètre approprié pour indiquer lequelHabituellement, je fais:
Où
42
représente la ligne du test que je veux exécuter.EDIT1:
Vous pouvez également utiliser des balises. Voyez ici .
EDIT 2:
Essayer:
la source
rspec
échoué car la version de votre système est plus récente que celle de votre gemfile.Avec râteau:
(Le mérite revient à cette réponse . Allez voter contre lui.)
EDIT (merci à @cirosantilli): Pour exécuter un scénario spécifique dans la spécification, vous devez fournir une correspondance de modèle d'expression régulière qui correspond à la description.
la source
SPEC=path/to/spec.rb:42
pour exécuter le test sur le numéro de ligne donné, bien qu'il semble que tous lesit_behaves_like
tests seront également exécutés (bug?).Vous pouvez transmettre une expression régulière à la commande spec qui exécutera uniquement les
it
blocs correspondant au nom que vous fournissez.Mise à jour 2019: Rspec2 est passé de la commande 'spec' à la commande 'rspec'.
la source
do
après uneit
,context
ou ladescribe
déclaration.Il existe de nombreuses options:
la source
Ma méthode préférée pour exécuter des tests spécifiques est légèrement différente - j'ai ajouté les lignes
Dans mon fichier spec_helper.
Maintenant, chaque fois que je veux exécuter un test spécifique (ou un contexte ou une spécification), je peux simplement y ajouter la balise "focus" et exécuter mon test normalement - seuls les tests focalisés s'exécuteront. Si je supprime toutes les balises de focus, les
run_all_when_everything_filtered
coups de pied et exécute tous les tests normalement.Ce n'est pas aussi rapide et facile que les options de ligne de commande - cela vous oblige à modifier le fichier pour le test que vous souhaitez exécuter. Mais cela vous donne beaucoup plus de contrôle, je pense.
la source
La réponse @apneadiving est une bonne façon de résoudre ce problème. Cependant, nous avons maintenant une nouvelle méthode dans Rspec 3.3. Nous pouvons simplement exécuter
rspec spec/unit/baseball_spec.rb[#context:#it]
au lieu d'utiliser un numéro de ligne. Extrait d' ici:Ainsi, au lieu de faire
rspec spec/unit/baseball_spec.rb:42
où il (test à la ligne 42) est le premier test, nous pouvons simplement le fairerspec spec/unit/baseball_spec.rb[1:1]
ou enrspec spec/unit/baseball_spec.rb[1:1:1]
fonction de l'imbrication du cas de test.la source
Dans les rails 5,
J'ai utilisé cette méthode pour exécuter un seul fichier de test (tous les tests dans un seul fichier)
Le nom de classe peut être utilisé pour correspondre au fichier souhaité
TopicsControllerTest
Ma classe
class TopicsControllerTest < ActionDispatch::IntegrationTest
Production :
Si vous le souhaitez, vous pouvez modifier le regex pour l'adapter à une seule méthode de test
\TopicsControllerTest#test_Should_delete\
la source
Pour le modèle, il exécutera la casse sur la ligne numéro 5 uniquement
Pour le contrôleur: il exécutera la casse sur la ligne numéro 5 uniquement
Pour le modèle de signal ou le contrôleur, supprimez le numéro de ligne d'en haut
Pour exécuter le boîtier sur tous les modèles
Pour exécuter la casse sur tous les contrôleurs
Pour exécuter tous les cas
la source
Exécutez les commandes depuis le répertoire racine de votre projet:
la source
à partir de rspec 2, vous pouvez utiliser les éléments suivants:
la source
Étant donné que vous êtes sur un projet rails 3 avec rspec 2, à partir du répertoire racine de rails:
devrait certainement fonctionner. je suis fatigué de taper ça donc j'ai créé un alias pour raccourcir 'bundle exec rspec' en 'bersp'
'bundle exec' est pour qu'il charge l'environnement de gemme exact spécifié dans votre fichier gem: http://gembundler.com/
Rspec2 est passé de la commande «spec» à la commande «rspec».
la source
J'utilise ce joyau de garde pour exécuter automatiquement mon test. Il exécute le test après avoir créé ou mis à jour des opérations sur le fichier de test.
https://github.com/guard/guard-test
ou généralement vous pouvez exécuter en utilisant la commande suivante
rspec spec / controllers / groups_controller_spec.rb
la source
Vous pouvez faire quelque chose comme ça:
la source
Vous pouvez utiliser
le numéro de ligne doit être le numéro de ligne des lignes «décrire» ou «it» afin qu'il exécute les tests présents dans ce bloc particulier. à la place, il exécutera toutes les lignes à côté de line_number.
vous pouvez également créer un bloc avec un nom personnalisé, puis exécuter uniquement ces blocs.
la source
Une autre erreur courante consiste à avoir ou à mettre à niveau une ancienne application Rails vers Rails 5+ et à placer
require 'spec_helper'
en haut de chaque fichier de test. Cela devrait être changé enrequire 'rails_helper'
. Si vous voyez un comportement différent entre la tâche de râteau (rake spec
) et lorsque vous exécutez une seule spécification (rspec path/to/spec.rb
), c'est une raison courantela meilleure solution est de
1) assurez-vous que vous utilisez
require 'rails_helper'
en haut de chacun de vos fichiers de spécifications - pas l'ancien stylerequire 'spec_helper'
2) utilisez larake spec SPEC=path/to/spec.rb
syntaxele style plus ancien,
rspec path/to/spec.rb
je pense, devrait être considéré comme hors de mode par la communauté en ce moment en 2020 (mais bien sûr, vous le ferez fonctionner, autres considérations mises à part)la source