Bagaimana menjalankan uji tunggal dari rangkaian uji rel?

Jawaban:

158

CATATAN: Ini tidak menjalankan tes via rake. Jadi kode apa pun yang Anda miliki tidak Rakefileakan dijalankan.

Untuk menjalankan tes tunggal, gunakan perintah berikut dari direktori utama proyek rails Anda:

ruby -I test test/unit/my_model_test.rb -n test_name

Ini menjalankan tes tunggal bernama "nama", didefinisikan dalam kelas MyModelTest dalam file yang ditentukan. Test_name dibentuk dengan mengambil nama tes, menambahkannya dengan kata "test", lalu memisahkan kata-kata dengan garis bawah. Sebagai contoh:

class MyModelTest < ActiveSupport::TestCase

  test "valid with good attributes" do
    # do whatever you do
  end

  test "invalid with bad attributes" do
    # do whatever you do
  end
end

Anda dapat menjalankan kedua tes melalui:

ruby -I test test/unit/my_model_test.rb

dan hanya tes kedua via

ruby -I test test/unit/my_model_test.rb -n test_invalid_with_bad_attributes
Darryl
sumber
4
Ini tidak berfungsi untuk saya (pada tes fungsional atau unit). Saya mengerti 0 tests, 0 assertions, 0 failures, 0 errors. Rails 3.0.7.
B Seven
10
Saya pribadi penggemar bentuk regex: -n "/good/". Shell melarikan diri selalu menyenangkan, jadi saya cenderung tetap pada regex sederhana, tetapi jauh lebih mudah daripada menulis nama tes penuh sepanjang waktu.
Groxx
4
Penting untuk dicatat bahwa agar ini berfungsi, Anda seharusnya tidak berada di direktori MAIN sebagaimana ditentukan dalam respons tetapi di subdirektori yang berisi test/folder. Misalnya, jika saya ingin menjalankan tes activesupport/test/core_ext/array_ext_test.rbsaya harus activesupport/terlebih dahulu.
Vincent B.
3
@Groxx - Akhirnya solusi! Terima kasih! -n "/good/"bekerja.
B Seven
Hati-hati menjalankan ini di 2018+. Ini memotong beberapa tugas pengujian yang dibangun ke dalam rel (seperti db: test: prep) yang digunakan untuk banyak hal, seperti bertukar data lokal untuk data fixture, dan mengembalikannya lagi. Menjalankan ini menghancurkan basis data lokal saya. Pertimbangkan solusi yang menggunakan tugas pengujian rel bawaan, seperti stackoverflow.com/a/47006811/1154642 (yang bekerja untuk saya).
bryanbraun
100

Jalankan file uji :

rake test TEST=tests/functional/accounts_test.rb

Jalankan uji tunggal dalam file uji:

rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n /paid accounts/"

(Dari komentar @Puhlze.)

nafsu birahi
sumber
10
Juga, jika Anda ingin menjalankan satu tes di dalam file yang diberikan Anda dapat menambahkan var lingkungan TESTOPTS yang akan diteruskan ke tes. EG rake test TEST = tes / fungsional / accounts_test.rb TESTOPTS = "- n / akun berbayar /"
Puhlze
1
jika perintah tes terakhir tidak berfungsi, coba rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"(lampirkan /paid accounts/dengan tanda kutip tunggal)
rrw
38

Untuk rel 5:

rails test test/models/my_model.rb
James
sumber
9
Tapi ini menjalankan semua kasus uji dalam file, pertanyaannya meminta untuk menjalankan tes tunggal ...
user000001
Anda dapat menjalankan tes tunggal dengan menambahkan nomor baris ke nama file:bin/rails test test/models/user_test.rb:27
Segfault
30

Berkat @James, jawabannya sepertinya:

rails test test/models/my_model.rb:22

Anggap 22 adalah nomor baris dari tes yang diberikan. Menurut bantuan rel:

 $ rails test --help

Anda dapat menjalankan satu pengujian dengan menambahkan nomor baris ke nama file:

    bin/rails test test/models/user_test.rb:27

Harap perhatikan juga bahwa pengujian Anda harus diturunkan dari ActionDispatch :: IntegrationTest agar ini berfungsi (Itu kesalahan saya):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.
Roozbeh Zabihollahi
sumber
4
Ini tampaknya menjadi jawaban terbaik berdasarkan panduan Rails, setidaknya untuk menguji jalur tertentu.
tfantina
12

Di rel 5,

Saya menggunakan cara ini untuk menjalankan file uji tunggal (semua tes dalam satu file)

rails test -n /TopicsControllerTest/ -v

lihat di sini https://stackoverflow.com/a/41183694/3626659

Alupotha
sumber
1
ini adalah jawaban terbaik untuk pertanyaan untuk versi rail terbaru, +1
user000001
5

Untuk menjalankan tes tunggal di suite Rails aktual:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb
Brian Rose
sumber
3

Itu pertanyaan konyol saya di tengah malam. Rails dengan ramah mencetak perintah yang dijalankannya rake test. Sisanya adalah latihan memotong dan menempel.

~/projects/rails/actionpack (my2.3.4)$ ruby -I"lib:test" "/usr/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/controller/base_test.rb"
artemave
sumber
2

Jika Anda ingin menjalankan tes tunggal, Anda bisa menjalankannya sebagai skrip Ruby biasa

ruby actionmailer/test/mail_layout_test.rb

Anda juga dapat menjalankan seluruh rangkaian (mis. ActiveRecord atau ActionMailer) dengan cd-ing ke direktori dan berjalan rake testdi dalam sana.

Aupajo
sumber
1
Not in Rails - setidaknya tidak dengan file tes standar yang dihasilkan. Mereka memiliki "memerlukan 'test_helper'" pada baris pertama, tetapi jalur muat tidak akan diatur pada waktunya. Jika Anda mengubah setiap baris pertama menjadi permintaan eksplisit ("memerlukan File.join (File.dirname ( FILE ), '..', 'test_helper')"), maka solusi Anda berfungsi.
James A. Rosen
ahem, iturequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen
@ Gayus Diperiksa ulang. Yang pertama tidak bekerja, tetapi cd-in tidak. Hanya untuk memperjelas (saya tidak yakin jika saya salah membaca ini, tetapi Anda memang mengatakan "file tes yang dihasilkan"), ini untuk perpustakaan Rails sendiri, bukan proyek Rails.
Aupajo
2

Dalam situasi saya rakehanya bekerja TESTOPTS="-n='/sample/'":

bundle exec rake test TEST=test/system/example_test.rb TESTOPTS="-n='/sample/'"
N0xFF
sumber
0

Pertama, akses folder lib yang ingin Anda uji (ini penting) dan kemudian jalankan:

~/Projects/rails/actionview (master)$ ruby -I test test/template/number_helper_test.rb 
Diego Plentz
sumber
0

Folder rel

  bundle install
  bundle exec ruby -I"activerecord/test" activerecord/test/cases/relation/where_test.rb 

Catatan Anda perlu memuat folder yang sesuai: "activerecord / test" (di mana Anda memiliki tes)

Igor Kasyanchuk
sumber