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
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
Yanıtlar:
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
m
şu anda bu Minitest 5.0'da çalışmıyor .
Komut şöyle olmalıdır:
% rake test TEST=test/test_foobar.rb TESTOPTS="--name=test_foobar1 -v"
TESTOPTS=...
uzakta
-v
?
Denedin mi:
ruby path/to/test_file.rb --name test_method_name
specify {}
? Bunlar sadece test_0001_anonymous
... olarak görünür test_0001_anonymous
ve 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ı?
cannot load such file -- test_helper
.
ruby -Itest path/to/tc_file.rb --name test_method_name
gibi kullanın
bundle exec ruby -I lib path/to --name test_fit
Mücevher gerekmez:
ruby -Itest test/lib/test.rb --name /some_test/
Kaynak: http://blog.arvidandersson.se/2012/03/28/minimalicous-testing-in-ruby-1-9
Bu, string name definition
testlerde 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 -n
seç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/
__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
.
MiniTest ile Rails 5+ kullanıyorsanız, tüm testleri tek bir dosyada çalıştırmanın en iyi yolu:
bin/rails test path/to/test_file.rb
Ve tek bir test için (örneğin, 25. satırda):
bin/rails test path/to/test_file.rb:25
Bkz. Http://guides.rubyonrails.org/testing.html#the-rails-test-runner
Bunu yapmanın 2 yolu vardır:
Rake::TestTask
hedef 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, --name
tı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
rake
(0.9.2) ile doğru çalıştığını ve maymun yamasının gerekli olmadığını unutmayın.
TESTOPTS="--name test_foobar"
çalışmıyor, ama TESTOPTS="--name=test_foobar"
çalışıyor.
--name
Bir 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 .
Turn gem'i minitest ile kullanıyorsanız, Turn.config.pattern
Minitest Turn koşucusu ARG'lerde --name seçeneğine uymadığından seçeneği kullandığınızdan emin olun .
name
seç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
Ş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
kullanırım ruby /path/to/test -n /distinguishable word/
Edit:
-n
için bir kısayol --name
. distinguishable word
Test 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.
-n
parametre ne anlama geliyor?
--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).
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
rails test path/to/test_file.rb:25
bkz. @Derek_Hill ans - guides.rubyonrails.org/testing.html#the-rails-test-runner