Saya memiliki file berikut:
/spec/controllers/groups_controller_spec.rb
Perintah apa di terminal yang saya gunakan untuk menjalankan spesifikasi itu dan di direktori apa saya menjalankan perintah?
File permata saya:
# 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
File spesifikasi:
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
AnApprentice
sumber
sumber
bundle exec rspec spec --help
kami akan memberikan jawabannya:Jawaban:
Tidak yakin berapa lama lebah ini tersedia, tetapi ada konfigurasi Rspec untuk menjalankan pemfilteran - jadi sekarang Anda dapat menambahkan ini ke
spec_helper.rb
:Dan kemudian menambahkan tag fokus ke
it
,context
ataudescribe
hanya menjalankan blok itu:Dokumentasi RSpec:
https://www.rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration#filter_run_when_matching-instance_method
sumber
rspec
perintah untuk menjalankan spec dengan parameter yang sesuai untuk menunjukkan yangBiasanya saya lakukan:
Di mana
42
mewakili garis tes yang ingin saya jalankan.EDIT1:
Anda juga bisa menggunakan tag. Lihat di sini .
EDIT 2:
Mencoba:
sumber
rspec
gagal hanya karena versi pada sistem Anda lebih baru daripada yang ada di gemfile Anda.Dengan menyapu:
(Penghargaan untuk jawaban ini . Pilih dia.)
EDIT (terima kasih kepada @cirosantilli): Untuk menjalankan satu skenario spesifik dalam spesifikasi, Anda harus menyediakan kecocokan pola regex yang cocok dengan deskripsi.
sumber
SPEC=path/to/spec.rb:42
untuk menjalankan tes pada nomor baris yang diberikan, meskipun tampaknyait_behaves_like
tes apa pun juga akan dijalankan (bug?).Anda bisa memberikan regex ke perintah spec yang hanya akan menjalankan
it
blok yang cocok dengan nama yang Anda berikan.Pembaruan 2019: Rspec2 beralih dari perintah 'spec' ke perintah 'rspec'.
sumber
do
setelahit
,context
ataudescribe
deklarasi.Ada banyak pilihan:
sumber
Metode pilihan saya untuk menjalankan tes tertentu sedikit berbeda - saya menambahkan baris
Ke file spec_helper saya.
Sekarang, setiap kali saya ingin menjalankan satu tes khusus (atau konteks, atau spesifikasi), saya cukup menambahkan tag "fokus" ke sana, dan menjalankan pengujian saya seperti biasa - hanya tes yang difokuskan yang akan berjalan. Jika saya menghapus semua tag fokus,
run_all_when_everything_filtered
tendangan masuk dan menjalankan semua tes seperti biasa.Ini tidak secepat dan mudah seperti opsi baris perintah - itu memang mengharuskan Anda untuk mengedit file untuk tes yang ingin Anda jalankan. Tapi itu memberi Anda lebih banyak kontrol, saya rasa.
sumber
@memberitahukan jawaban adalah cara yang bagus untuk menyelesaikan ini. Namun, sekarang kami memiliki metode baru di Rspec 3.3. Kita bisa menjalankan
rspec spec/unit/baseball_spec.rb[#context:#it]
alih-alih menggunakan nomor baris. Diambil dari sini:Jadi, alih-alih melakukan di
rspec spec/unit/baseball_spec.rb:42
mana (tes pada baris 42) adalah tes pertama, kita bisa melakukanrspec spec/unit/baseball_spec.rb[1:1]
ataurspec spec/unit/baseball_spec.rb[1:1:1]
bergantung pada seberapa bersarangnya test case.sumber
Di rel 5,
Saya menggunakan cara ini untuk menjalankan file uji tunggal (semua tes dalam satu file)
Nama kelas dapat digunakan untuk mencocokkan dengan file yang diinginkan
TopicsControllerTest
Kelasku
class TopicsControllerTest < ActionDispatch::IntegrationTest
Output:
Jika Anda mau, Anda dapat mengubah regex agar sesuai dengan metode pengujian tunggal
\TopicsControllerTest#test_Should_delete\
sumber
Untuk model, itu akan menjalankan kasus pada nomor baris 5 saja
Untuk pengontrol: hanya menjalankan case pada nomor baris 5
Untuk model sinyal atau pengontrol, hapus nomor saluran dari atas
Untuk menjalankan kasing pada semua model
Untuk menjalankan kasing pada semua pengontrol
Untuk menjalankan semua kasus
sumber
Jalankan perintah dari direktori root proyek Anda:
sumber
dimulai dengan rspec 2 Anda dapat menggunakan yang berikut:
sumber
Mengingat Anda berada di proyek rails 3 dengan rspec 2, Dari direktori root rails:
pasti harus bekerja. Saya bosan mengetik sehingga saya membuat alias untuk mempersingkat 'bundle exec rspec' menjadi 'bersp'
'bundle exec' adalah untuk memuat lingkungan permata yang tepat yang ditentukan dalam file gem Anda: http://gembundler.com/
Rspec2 beralih dari perintah 'spec' ke perintah 'rspec'.
sumber
Saya menggunakan permata penjaga ini untuk menjalankan tes saya secara otomatis. Ini menjalankan tes setelah membuat atau memperbarui operasi pada file uji.
https://github.com/guard/guard-test
atau biasanya Anda dapat menjalankan menggunakan perintah berikut
rspec spec / controllers / groups_controller_spec.rb
sumber
Anda dapat melakukan sesuatu seperti ini:
sumber
Kamu bisa memakai
nomor baris harus nomor baris dari baris 'uraikan' atau 'itu' sehingga akan menjalankan tes yang ada di blok tertentu. alih-alih itu akan menjalankan semua baris di sebelah line_number.
Anda juga dapat membuat blok dengan nama khusus dan kemudian dapat menjalankan blok-blok itu saja.
sumber
Kesalahan umum lainnya adalah masih memiliki atau telah meningkatkan aplikasi Rails yang lebih lama ke Rails 5+ dan menempatkan
require 'spec_helper'
di bagian atas setiap file tes. Ini harus diubah menjadirequire 'rails_helper'
. Jika Anda melihat perilaku yang berbeda antara tugas menyapu (rake spec
) dan ketika Anda menjalankan satu spesifikasi (rspec path/to/spec.rb
), ini adalah alasan umumsolusi terbaik adalah
1) pastikan Anda menggunakan
require 'rails_helper'
di bagian atas dari masing-masing file spesifikasi Anda - bukan gaya lamarequire 'spec_helper'
2) menggunakanrake spec SPEC=path/to/spec.rb
sintaksisgaya lama yang
rspec path/to/spec.rb
saya pikir harus dianggap tidak populer oleh komunitas saat ini pada tahun 2020 (tapi tentu saja Anda akan membuatnya bekerja, selain pertimbangan lain)sumber