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

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.)


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

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
.
.
.

4
Ini tampaknya menjadi jawaban terbaik berdasarkan panduan Rails, setidaknya untuk menguji jalur tertentu.
tfantina


5

Untuk menjalankan tes tunggal di suite Rails aktual:

bundle exec ruby -I"railties/test" actionpack/test/template/form_options_helper_test.rb


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"

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.


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/'"

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 

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)

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.