プロジェクトのソースコードをダウンロードし、バグを見つけて修正しました。
今、私は何かを壊したかどうかを調べるためにテストを実行したいと思います。
テストはミニテストDSLで行われます。
それらを一度に実行するにはどうすればよいですか?
該当するレーキタスクなどを検索しましたが、見つかりませんでした。
Rake::TestTaskへのリンクは次のとおりです。
開始するための例がページにあります。
私が今宝石に使用している別のものを投稿します:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.pattern = "spec/*_spec.rb"
end
ご覧のとおり、ファイルはすべて含まれ/lib
ており、仕様は含まれて/spec
おり、名前が付けられていると思います。whatever_spec.rb
それが役に立てば幸い。
ロックの答えの方が優れていますが、rubyコマンドのように、コマンドから直接ミニテストを実行することもできることも指摘したいと思います。spec / calculator_spec.rbファイルでテストを実行するには、次のコマンドを実行します。
$ ruby spec/calculator_spec.rb
次のコードをcalculator_spec.rbファイルに含めることを忘れないでください。
require 'minitest/spec'
require 'minitest/autorun'
spec /ディレクトリ内のすべてのテストを実行するには、次のコマンドを使用します(詳細については、この投稿を参照してください。GlobbingはMinitestでは機能しません-1つのファイルのみが実行されます)
$ for file in spec/*.rb; do ruby $file; done
これはRake::TestTask
、多かれ少なかれ、内部で行われていることです。
ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb
注:lib
&test/test*.rb
(上記)がデフォルトですが、それぞれtest
&がより一般的です。test/*_test.rb
出典:c34d9e0行169のrake / testtask.rb
JRubyを使用していて、起動コストを2回(Rakeに1回、Rakeが開始するサブプロセスに1回)支払うことを避けたい場合は、そのコマンドを使用するだけです。
rakefile
これが私のトップディレクトリに置いた全体です。
task :default => :test
task :test do
Dir.glob('./test/*_test.rb').each { |file| require file}
end
すべてのテストファイルを一度に実行するには、と入力するだけですrake
。それでおしまい!
require 'minitest/autorun'
各Minitestファイルの上部にあることを確認してください。Dir.globは間違いなくMinitestで動作します。
すべてのテストメソッドの名前を含む、きれいな色付きのMinitest出力を取得するためminitest_helper.rb
に、/testディレクトリにファイルがあります。(gem minitest-reportersをインストールする必要がありました):
require 'minitest/reporters'
Minitest::Reporters.use!(Minitest::Reporters::SpecReporter.new)
require 'minitest/autorun'
require_relative './minitest_helper'
各テストファイルの先頭に配置する必要がありました。
これは、Makefileを介して実行することもできます。
default:
echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby
実行make
すると、すべてのテストが実行されます。
$ rake test
レール5.0ボックスを使い果たしました。
Rubyの標準ライブラリのみを使用してこれを行う別の方法は、を使用することですDir.glob
。ルビーファイル内から、これは次のようになります。
require "minitest/autorun"
Dir.glob("**/*Test.rb") { |f| require_relative(f) }
または、コマンドラインから次のコマンドを使用できます。
ruby -I . -e "require 'minitest/autorun'; Dir.glob('**/*Test.rb') { |f| require(f) }"
Dir.glob('**/*Test.rb')
現在のディレクトリでに一致するファイルを再帰的に検索するため、*Test.rb
これらすべてのファイルrequire
またはrequire_relative
それらを取得するだけです。コマンドラインからrequire_relative
失敗するので、を使用しますが、最初に現在のディレクトリをスルーrequire
に追加します$LOAD_PATH
-I .
これは非常に古い質問だと思いrake test
ますが、Rails 4.2では、テスト中のファイルやテスト/統合/、テスト/ユニット/などを含めて機能します。
レーキがない場合は、次のことを試してください。
http://blog.gingergriffis.com/post/85871430778/ruby-how-to-run-all-tests-in-a-directory
# run_all_tests.rb
require 'find'
require 'optparse'
options = {
:exclude => [],
}
OptionParser.new do |opts|
opts.on('--exclude Comma Separated String',
'Test scripts to exclude') do |css|
options[:exclude] = css.split(',')
end
end.parse!
commands = []
Find.find(File.dirname(__FILE__)) do |path|
Find.prune if path =~ /#{__FILE__}$/
if !File.directory?(path) && (path =~ /(.*)\.rb$/)
if options[:exclude].none? {|e| path.include?(e)}
commands << "ruby #{path}"
end
end
end
command_string = commands.join(" && ")
exec(command_string)