Bir rails test paketinden tek bir test nasıl çalıştırılır?


Yanıtlar:


158

NOT: Bu, testi üzerinden çalıştırmaz rake. Bu yüzden, sahip olduğunuz hiçbir kod Rakefileçalıştırılmayacaktır.

Tek bir test çalıştırmak için, rails projenizin ana dizininden aşağıdaki komutu kullanın:

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

Bu, belirtilen dosyadaki MyModelTest sınıfında tanımlanan "ad" adlı tek bir testi çalıştırır. Test_name, test adı alınarak, başına "test" sözcüğü eklenerek ve ardından sözcükler alt çizgilerle ayrılarak oluşturulur. Örneğin:

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

Her iki testi şu yolla çalıştırabilirsiniz:

ruby -I test test/unit/my_model_test.rb

ve üzerinden sadece ikinci test

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

4
Bu benim için çalışmıyor (fonksiyonel veya birim testlerinde). Anlıyorum 0 tests, 0 assertions, 0 failures, 0 errors. Raylar 3.0.7.
B Yedi

10
Ben şahsen regex formu hayranıyım: -n "/good/". Kabuktan kaçmak her zaman eğlencelidir, bu yüzden basit normal ifadelere bağlı kalmaya meyilliyim, ancak her zaman tam test adını yazmaktan çok daha kolay.
Groxx

4
Bunun çalışması için, yanıtta belirtildiği gibi MAIN dizininde değil, test/klasörü içeren alt dizinde olmanız gerektiğine dikkat etmek önemlidir . Örneğin, testi çalıştırmak activesupport/test/core_ext/array_ext_test.rbistersem activesupport/ilk önce ben olmalıyım .
Vincent B.

3
@Groxx - Nihayet bir çözüm! Teşekkür ederim! -n "/good/"çalıştı.
B Seven

Bunu 2018+ sürümünde çalıştırırken dikkatli olun. Yerel verileri fikstür verileri ile değiştirmek ve yeniden geri yüklemek gibi birçok şey için kullanılan raylarda yerleşik bazı test görevlerini (db: test: hazırla gibi) atlar. Bunu çalıştırmak yerel veritabanımı mahvetti. Stackoverflow.com/a/47006811/1154642 (benim için çalıştı) gibi yerleşik ray testi görevlerini kullanan bir çözüm düşünün .
bryanbraun

100

Bir test dosyası çalıştırın :

rake test TEST=tests/functional/accounts_test.rb

Bir test dosyasında tek bir test çalıştırın :

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

(@Puhlze'nin yorumundan.)


10
Ayrıca, verilen dosyada tek bir test çalıştırmak isterseniz, teste geçirilecek bir TESTOPTS ortam varlığını ekleyebilirsiniz. EG rake testi TEST = testler / fonksiyonel / accounts_test.rb TESTOPTS = "- n / ödenen hesaplar /"
Puhlze

1
ikinci test komutu çalışmazsa, deneyin rake test TEST=tests/functional/accounts_test.rb TESTOPTS="-n '/paid accounts/'"( /paid accounts/tek tırnak işaretlerini
ekleyerek


40

Raylar 5 için:

rails test test/models/my_model.rb

9
Ancak bu, dosyadaki tüm test durumlarını çalıştırır, soru tek bir test çalıştırılmasını ister ...
user000001

Dosya adına bir satır numarası ekleyerek tek bir test çalıştırabilirsiniz:bin/rails test test/models/user_test.rb:27
Segfault

31

@James sayesinde cevap şöyle görünüyor:

rails test test/models/my_model.rb:22

22'nin verilen testin satır numarası olduğunu varsayarsak. Raylara göre yardım:

 $ rails test --help

Dosya adına bir satır numarası ekleyerek tek bir test çalıştırabilirsiniz:

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

Ayrıca, bunun çalışması için testinizin ActionDispatch :: IntegrationTest'ten miras alması gerektiğini lütfen unutmayın (Bu benim hatamdı):

class NexApiTest < ActionDispatch::IntegrationTest
.
.
.

4
Bu, en azından belirli bir hattı test etmek için Rails kılavuzlarına göre en iyi cevap gibi görünüyor.
tfantina


5

Gerçek Rails paketinde tek bir test çalıştırmak için:

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


3

Bu aptalca bir gece yarısı sorumdu. Rails, üzerinde çalıştığı komutu nazikçe yazdırır rake test. Gerisi bir kes ve yapıştır egzersizidir.

~/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

Tek bir test çalıştırmak istiyorsanız, bunları normal bir Ruby betiği olarak çalıştırabilirsiniz.

ruby actionmailer/test/mail_layout_test.rb

Ayrıca cddizine -ing yaparak ve rake testorada çalıştırarak tüm paketi (örn. ActiveRecord veya ActionMailer) çalıştırabilirsiniz .


1
Rails'de değil - en azından oluşturulan varsayılan test dosyalarıyla. İlk satırda "test_helper gerektirir" "ibaresi vardır, ancak yükleme yolu zamanında ayarlanmayacaktır. Her ilk satırı açık bir gereksinim olarak değiştirirseniz ("File.join (Dosya.dirname ( FILE ), '..', 'test_helper')" gerektirir), çözümünüz çalışır.
James A. Rosen

ahem, burequire File.join(File.dirname(__FILE__), '..', 'test_helper')
James A. Rosen

@Gaius Çift kontrol edildi. Birincisi işe yaramıyor, ama cdiçeri giriyor. Açıkça söylemek gerekirse (bunu yanlış okuyup okumadığımdan emin değilim, ancak "oluşturulmuş test dosyaları" dediniz), bu bir Rails projesi değil , Rails kitaplığının kendisi içindir .
Aupajo

2

Benim durumumda rakesadece işler için TESTOPTS="-n='/sample/'":

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

0

İlk önce, test etmek istediğiniz kütüphanenin klasörüne erişin (bu önemlidir) ve ardından çalıştırın:

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

0

Rails klasörü

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

Uygun klasörü yüklemeniz gerektiğini unutmayın: "activerecord / test" (test yaptığınız yer)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.