Comment puis-je dire à Rails d'utiliser RSpec au lieu de test-unit lors de la création d'une nouvelle application Rails?


152

Je l' ai test-unitinstallé et rspecinstallé (ainsi que -core, -expectations, -mockset la -railsversion 2.6.x). Lorsque j'exécute la commande rails new foo, elle utilise test-unitpour générer les fichiers stub de test au lieu de rspec.

Existe-t-il une option où je peux dire aux rails d'utiliser rspec pour générer les tests à la place?

Réponses:


262

Les éléments suivants devraient fonctionner:

en ligne de commande:

rails new MYAPP -T # The -T option tells rails not to include Test::Unit

dans Gemfile:

gem 'rspec-rails'

en ligne de commande:

bundle install
rails g rspec:install

Je pense que certaines de ces étapes sont irrecevables, non? Cela semble fonctionner si cela est fait dans le bon ordre. Veuillez modifier votre réponse et je la marquerai comme acceptée.
aarona

60
Vous n'avez pas besoin de l' generator.rbinitialiseur, ceci est pris en charge par le railtie de RSpec. Tout ce dont vous avez besoin est rspec-railsdans le developmentgroupe du Gemfilequi est suffisant pour l'exiger pour les générateurs. Vous n'avez pas non plus besoin de générer l'application avec -T, vous pouvez supprimer le testrépertoire et cela fonctionnera.
Ryan Bigg

1
Pouvez-vous modifier le code de g.test_framework =: rspec à g.test_framework: rspec
Deepak Lamichhane

8
@RyanBigg: avec l'option -T, nous aurons "rails/test_unit/railtie"commentéapplication.rb
Giang Nguyen

13
Lorsque vous ajoutez la rspec-railsgemme, il est important de la mettre en test et en développement, sinon les générateurs n'utiliseront pas RSpec même si vous suivez les étapes ci-dessus.
févrierEncre

73

Créez votre nouvelle application de rails en tant que:

rails new <app_name> -T

Ou supprimez votre testrépertoire de votre application existante:

rm -rf test/

Faites une entrée dans votre Gemfile:

gem 'rspec-rails'

Depuis la ligne de commande, installez le gem

$ bundle install

À partir de la ligne de commande, installez rspec dans votre application:

$ rails g rspec:install

Maintenant, votre application de rails utilise RSpec au lieu de test-unit.


2
L'étape «installation groupée» était absente de cette liste. Ajoutée.
cczona

6

Une fois que vous avez créé votre application rails avec:

rails new <app_name> -T  # to exclude Test::Unit

Ajoutez le gem RSpec à votre Gemfile de la manière suivante:

group :development, :test do
  gem "rspec-rails"
end

Dans la ligne de commande, écrivez:

bundle install  # this will install the missing gems

Vous devez maintenant installer RSpec en exécutant:

rails generate rspec:install

Cela générera les fichiers suivants:

create  .rspec
create  spec
create  spec/spec_helper.rb
create  spec/rails_helper.rb

J'ai fortement recommandé de lire tous les commentaires spec_helper et rails_helper pour bien comprendre ce que fait chaque option.

Une fois que tout est réglé, vous pouvez exécuter tous vos tests avec:

bundle exec rspec

Vous pouvez en savoir plus sur les configurations recommandées spec_helper et rails_helper sur https://kolosek.com/rails-rspec-setup .


4

Je suis un nouveau développeur et je viens de créer un indicateur de rails (-rspec) pour résoudre le problème d'OP. Il se débarrasse de Test :: Unit et insère le gem rails-rspec avec un script bash. Le script peut être modifié pour aider les développeurs Linux en ajoutant automatiquement le gem therubyracer ou en créant des indicateurs et des ensembles de gemmes personnalisés. (peut-être aller spécifiquement à cette ligne de gemmes et supprimer le commentaire)

Voici l'essentiel et j'espère que cela aide quelqu'un là-bas. https://gist.github.com/MTen/8310116


0

Il n'y a aucun moyen natif de faire cela avec la railsCLI. Générez un nouveau projet sans test-unit:

rails new rails-app --skip-test

Et puis suivez les rspecinstructions pour l'intégrer dans la nouvelle application Rails.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.