MiniTest'te tek bir test yapmak mümkün müdür?


168

Tüm testleri tek bir dosyada çalıştırabilirim:

rake test TEST=path/to/test_file.rb

Ancak, bu dosyada yalnızca bir test çalıştırmak istersem nasıl yapmalıyım?

Şuna benzer işlevler arıyorum:

rspec path/to/test_file.rb -l 25

3
8 yıl sonra ve raylar için 5+ kullanıcı rails test path/to/test_file.rb:25bkz. @Derek_Hill ans - guides.rubyonrails.org/testing.html#the-rails-test-runner
notapatch 8:09

Yanıtlar:


43

Rspec path / to / file.rb -l 25 için benzer işlevler arıyorum

Evet! Kullanım Nick Quaranto yönettiği "m" mücevher . Bununla birlikte diyebilirsiniz:

m spec/my_spec.rb:25

4
Cevap işe yarıyor ve tam olarak sorulan soruydu :-) Tek bir test yapmanın Mini-test yolu isim eşleştirmektir (Bay Grimm'in cevabına bakınız). Bunu denediyseniz ve reddettiyseniz, Nick's Gem gibi standart olmayan alternatifleri denemenin zamanı geldi.
notapatch

3
Doğru, katılıyorum. Aslında m de bir seçenek olarak -n iletmek ister ... ya da MiniTest sadece satır numaraları ve yöntem adları kullanarak destekledi.
Elliot Winkler


Bu taş rspec tek bir test çalıştırmak için benzer şeyler yapmak iken, Minitest tam olarak soru tek bir test çalıştırmak için yerleşik bir yolu vardır. Bağımlılık gerekli değildir. Bir aksesuar mücevher ile daha kolay olabileceğini bilmek iyi (etrafında birçok kişi olabilir gibi) ama bu soru için, jduan veya randomor gibi saf en küçük cevapların daha iyi olacağını düşünüyorum
cefigueiredo 21:17

209

Komut şöyle olmalıdır:

% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"

6
+1 - yapmak istediğiniz budur. Belirli bir dosyada tüm testi test etmek istiyorsanız, sadece terk TESTOPTS=...uzakta
awenkhh

Çok yararlı cevap. MinitestReporter'ın test raporunun sonunda başarısız testlerin yeniden çalıştır komutlarını göstermesini sağlarım. Bakınız: gist.github.com/foton/141b9f73caccf13ccfcc
Fotoğraf

1
Ne yapar -v?
Jon Schneider

150

Denedin mi:

ruby path/to/test_file.rb --name test_method_name

10
Minispec kullanan testlere ne dersiniz specify {}? Bunlar sadece test_0001_anonymous... olarak görünür test_0001_anonymousve aynı sözdizimi birden fazla açıklama bloğunda kullanılırsa birden fazla s olabilir ... bu tür bir ortamda tekli testler yapmak için herhangi bir öneriniz var mı?
neezer

1
"tc", "test case" anlamına gelir.
Andrew Grimm

4
Diyor cannot load such file -- test_helper.
x-yuri

11
stackoverflow.com/a/15714985/327786ruby -Itest path/to/tc_file.rb --name test_method_name gibi kullanın
TlmaK0

bundle exec ruby -I lib path/to --name test_fit
puchu


49

Bu, string name definitiontestlerde beni rahatsız eden şeylerden biri .

Sahip olduğunda:

def test_my_test
end

testinizin nasıl adlandırıldığını her zaman bilirsiniz;

ruby my_test -n test_my_test

Ama şöyle bir şey olduğunda:

it "my test" do
end

bu testin gerçekten dahili olarak nasıl adlandırıldığından asla emin olamazsınız, böylece -nseçeneği doğrudan kullanamazsınız .

Bu testin dahili olarak nasıl adlandırıldığını bilmek için sadece bir seçeneğiniz vardır: günlüklere bakarak anlamaya çalışmak için tüm dosyayı yürütün.

Geçici çözümüm (geçici olarak) test adına çok benzersiz bir şey eklemek:

it "my test xxx" do
end

ve '-n' parametresinin RegEx sürümünü aşağıdaki gibi kullanın:

ruby my_test.rb -n /xxx/

6
regex sürümü -n parametresi debriyaj bilgi parçası oldu, teşekkürler!
Woahdae

__method__Şu anda yürütülen yöntem bağlamında (bu durumda testiniz) arayarak bunu kontrol edebileceğinizi unutmayın . Mevcut uygulama böyle bir şeyle sonuçlanır "does not break my stuff".gsub(" ", "_").prepend("test_"). Ardından, örneğin çalıştırın ruby -Itest test/integration/stuff_flow_test.rb --name test_does_not_break_my_stuff.
TK-421


23

Tek bir dosya çalıştırmak için bunu kullanabilirsiniz:

rake test TEST=test/path/to/file.rb

Ben de kullandım

ruby -I"lib:test" test/path/to/file.rb

daha iyi görüntü için.


12

Bunu yapmanın 2 yolu vardır:

  1. Testleri 'elle' gerçekleştirin (Andrew Grimm'in cevabına bakınız).
  2. Hack Rake::TestTaskhedef farklı testler yükleyici kullanmak.

Rake::TestTask (tırmık 0.8.7'den) teorik olarak ek seçenekleri MiniTest::Unit bir "TESTOPTS=blah-blah"komut satırı seçeneğiyle , örneğin:

% komisyon testi TEST = test / test_foobar.rb TESTOPTS = "- test_foobar1 -v adı"

Pratikte, --nametırmık iç parçaları nedeniyle (test adları için bir filtre) seçeneği çalışmaz. Bunu düzeltmek için Rakefile'ınıza küçük bir maymun yaması yazmanız gerekir:

# overriding the default rake tests loader
class Rake::TestTask
  def rake_loader
    'test/my-minitest-loader.rb'
  end
end

# our usual test terget 
Rake::TestTask.new {|i|
  i.test_files = FileList['test/test_*.rb']
  i.verbose = true 
}

Bu düzeltme eki bir dosya oluşturmanızı gerektirir test/my-minitest-loader.rb:

ARGV.each { |f|
  break if f =~ /^-/
  load f
}

Minitest için tüm olası seçenekleri yazdırmak için şunu yazın

% ruby ​​-r en küçük / autorun -e '' - --help

3
İlk örneğin daha yeni bir rake(0.9.2) ile doğru çalıştığını ve maymun yamasının gerekli olmadığını unutmayın.
karışıklık

1
Komisyon sürüm 10.5.0 ile çalıştığımda TESTOPTS="--name test_foobar"çalışmıyor, ama TESTOPTS="--name=test_foobar"çalışıyor.
kangkyu

11

--nameBir testi adına veya adındaki bir sayıya göre çalıştırmak için geçebilirsiniz :

-n, --name PATTERN               Filter run on /regexp/ or string.

Örneğin:

$ ruby spec/stories/foo_spec.rb --name 3

FAIL (0:00:00.022) test_0003_has foo
Expected: "foo"
Actual: nil

Bu bayrak Minitest'in README'sinde belgelenmiştir .


1

Turn gem'i minitest ile kullanıyorsanız, Turn.config.patternMinitest Turn koşucusu ARG'lerde --name seçeneğine uymadığından seçeneği kullandığınızdan emin olun .


Bu, nameseçeneğin yutulması için Turn'un olduğunu fark etmem gereken ipucuydu . Teşekkürler! O Turn artık korunmuyor, ben en az gazetecilere göç etmeyi planlıyorum
pdobb

1

Şuna benzer işlevler arıyorum:

rspec yolu / / / test_file.rb -l 25

İşte bunu yapıyor bir mücevher vardır: minitest-line.

gem install minitest-line
ruby test/my_file -l 5

dan https://github.com/judofyr/minitest-line#minitest-line


Merhaba @ChrisHough, tam olarak neyin çalışmadığını açıklayabilir misiniz (örneğin bir hata mesajı)? En küçük satır taşının amacı sadece MiniTest'te tek bir test yapmaktır. Çalışmıyorsa en küçük satırda bir hata bulmuş olabilirsiniz.
knugie

1

kullanırım ruby /path/to/test -n /distinguishable word/

Edit: -niçin bir kısayol --name. distinguishable wordTest açıklamasına koyduğunuz herhangi bir dize olabilir, genellikle diğer testlerin açıklamalarında bulunmayacağını bildiğim bazı rastgele kelimeler kullanırım.


Bunu daha fazla açıklayabilir misiniz? Bu -nparametre ne anlama geliyor?
Nico Haase

Bunun için bir kestirme yol --name. Sadece kolaylık. / Regex / ile özellikle kullanışlıdır, genellikle bir test adına rastgele bazı kelimeler koyarım (diğer testlerin açıklamalarında yer almayacağını biliyorum).
sloneorzeszki

1
Lütfen bu konuya açıklama kısmına değil, cevabın kendisine bir açıklama ekleyin
Nico Haase

0

Aşağıdaki çalışacak

def test_abc
end

test "hello world"
end

Bu tarafından çalıştırılabilir

bundle exec ruby -I test path/to/test -n test_abc

bundle exec ruby -I test path/to/test -n test_hello_word

-1

rails test path/to/test_file.rb:25 yapacağım

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.