Come posso dire a Rails di usare RSpec invece di unità di test quando creo una nuova app Rails?


152

Ho test-unitinstallato e rspecinstallato (insieme a -core, -expectations, -mockse-rails la versione 2.6.x). Quando eseguo il comando rails new foo, viene utilizzato test-unitper generare i file stub di prova anziché rspec.

Esiste un'opzione in cui posso dire a rails di usare rspec per generare i test?

Risposte:


262

Quanto segue dovrebbe funzionare:

alla riga di comando:

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

nel Gemfile:

gem 'rspec-rails'

alla riga di comando:

bundle install
rails g rspec:install

Penso che alcuni di questi passaggi siano fuori servizio, no? Questo sembra che funzionerebbe se fatto nel giusto ordine. Modifica la tua risposta e la contrassegnerò come accettata.
aarona,

60
Non è necessario l' generator.rbinizializzatore, questo è curato dalla guida di RSpec. Tutto ciò che serve è rspec-railsall'interno del developmentgruppo di ciò Gemfileche è sufficiente per richiederlo per i generatori. Inoltre non è necessario generare l'app con -T, è possibile eliminare la testdirectory e funzionerà.
Ryan Bigg,

1
Puoi modificare il codice da g.test_framework =: rspec a g.test_framework: rspec
Deepak Lamichhane

8
@RyanBigg: con l'opzione -T di cui avremo "rails/test_unit/railtie"commentatoapplication.rb
Giang Nguyen,

13
Quando aggiungi la rspec-railsgemma, è importante metterla sotto test e sviluppo, altrimenti i generatori non useranno RSpec anche se segui i passaggi precedenti.
febbraioInchiostro

73

Crea la tua nuova applicazione rails come:

rails new <app_name> -T

Oppure rimuovi la tua testdirectory dall'applicazione esistente:

rm -rf test/

Inserisci una voce nel tuo Gemfile:

gem 'rspec-rails'

Dalla riga di comando installa la gemma

$ bundle install

Dalla riga di comando installa rspec nella tua applicazione:

$ rails g rspec:install

Ora l'applicazione rotaie utilizza RSpec invece di unità di test.


2
il passo 'installazione bundle' mancava da quell'elenco. Aggiunto.
cczona,

6

Una volta creata l'applicazione rotaie con:

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

Aggiungi la gemma RSpec al tuo Gemfile nel modo seguente:

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

Nella riga di comando scrivi:

bundle install  # this will install the missing gems

Ora devi installare RSpec eseguendo:

rails generate rspec:install

Ciò genererà i seguenti file:

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

Ho fortemente raccomandato di leggere tutti i commenti di spec_helper e rails_helper per capire bene cosa fa ogni opzione.

Una volta impostato tutto, puoi eseguire tutti i test con:

bundle exec rspec

Puoi leggere ulteriori informazioni sulle configurazioni spec_helper e rails_helper consigliate su https://kolosek.com/rails-rspec-setup .


4

Sono un nuovo sviluppatore e ho appena creato un flag rails (-rspec) per risolvere il problema di OP. Elimina Test :: Unit e inserisce la gemma rails-rspec con uno script bash. Lo script può essere modificato per aiutare gli sviluppatori di Linux aggiungendo automaticamente gemma therubyracer o creando flag e gemset personalizzati. (forse specificatamente andando su quella linea di gemme ed eliminando il commento)

Ecco l'essenza && Spero che questo aiuti qualcuno là fuori. https://gist.github.com/MTen/8310116


0

Non esiste un modo nativo per farlo con l' railsinterfaccia della riga di comando. Genera un nuovo progetto senza test-unit:

rails new rails-app --skip-test

Quindi segui le rspecistruzioni per integrarlo nella nuova app Rails.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.