Bagaimana saya bisa memberi tahu Rails untuk menggunakan RSpec alih-alih unit uji saat membuat aplikasi Rails baru?

152

Saya telah test-unitterinstal dan rspecdiinstal (bersama dengan -core, -expectations, -mocksdan -rails2.6.x versi). Ketika saya menjalankan perintah rails new foo, itu digunakan test-unituntuk menghasilkan file rintisan pengujian bukan rspec.

Apakah ada opsi di mana saya dapat memberitahu rel untuk menggunakan rspec untuk menghasilkan tes?

aarona
sumber

Jawaban:

262

Berikut ini harus bekerja:

di baris perintah:

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

dalam Gemfile:

gem 'rspec-rails'

di baris perintah:

bundle install
rails g rspec:install
Zabba
sumber
Saya pikir beberapa langkah itu tidak beres, bukan? Ini terlihat seperti ini akan bekerja meskipun jika dilakukan dalam urutan yang benar. Harap edit jawaban Anda dan saya akan menandainya sebagai diterima.
aarona
60
Anda tidak perlu generator.rbpenginisialisasi, ini dirawat oleh railtie RSpec. Yang Anda butuhkan adalah rspec-railsdi dalam developmentgrup Gemfileyang cukup untuk mensyaratkan generator. Anda juga tidak perlu membuat aplikasi -T, Anda dapat menghapus testdir dan itu akan berfungsi.
Ryan Bigg
1
Bisakah Anda mengedit kode dari g.test_framework =: rspec ke g.test_framework: rspec
Deepak Lamichhane
8
@RyanBigg: dengan opsi -T yang akan kami "rails/test_unit/railtie"komentariapplication.rb
Giang Nguyen
13
Saat Anda menambahkan rspec-railspermata, penting untuk menguji dan mengembangkannya, atau generator tidak akan menggunakan RSpec bahkan jika Anda mengikuti langkah-langkah di atas.
februaryInk
73

Buat aplikasi rel baru Anda sebagai:

rails new <app_name> -T

Atau hapus testdirektori Anda dari aplikasi yang ada:

rm -rf test/

Buat entri di Gemfile Anda:

gem 'rspec-rails'

Dari baris perintah instal permata

$ bundle install

Dari baris perintah, instal rspec ke dalam aplikasi Anda:

$ rails g rspec:install

Sekarang aplikasi rel Anda menggunakan RSpec, bukan unit uji.

Sayuj
sumber
2
Langkah 'bundle install' hilang dari daftar itu. Ditambahkan.
cczona
6

Setelah Anda membuat aplikasi rel Anda dengan:

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

Tambahkan permata RSpec ke Gemfile Anda dengan cara berikut:

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

Di baris perintah tulis:

bundle install  # this will install the missing gems

Sekarang Anda perlu menginstal RSpec dengan menjalankan:

rails generate rspec:install

Ini akan menghasilkan file-file berikut:

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

Saya sangat merekomendasikan untuk membaca semua komentar spec_helper dan rails_helper untuk mendapatkan pemahaman yang baik tentang apa yang dilakukan setiap opsi.

Setelah semuanya diatur, Anda dapat menjalankan semua tes dengan:

bundle exec rspec

Anda dapat membaca lebih lanjut tentang konfigurasi spec_helper dan rails_helper yang disarankan di https://kolosek.com/rails-rspec-setup .

Nesha Zoric
sumber
4

Saya adalah pengembang baru dan saya baru saja membuat flag rails (-rspec) untuk mengatasi masalah OP. Itu menghilangkan Test :: Unit dan menyisipkan permata rails-rspec dengan skrip bash. Script dapat dimodifikasi untuk membantu pengembang linux dengan secara otomatis menambahkan permata therubyracer atau membuat bendera dan permata khusus. (mungkin secara khusus pergi ke garis permata itu dan menghapus komentar)

Inilah intinya && Saya harap ini membantu seseorang di luar sana. https://gist.github.com/MTen/8310116

MTen
sumber
0

Tidak ada cara asli untuk melakukan ini dengan railsCLI. Hasilkan proyek baru tanpa test-unit:

rails new rails-app --skip-test

Dan kemudian ikuti rspecinstruksi untuk mengintegrasikannya ke dalam aplikasi Rails baru.

ini adalah desainku
sumber