74

プロジェクトのソースコードをダウンロードし、バグを見つけて修正しました。

今、私は何かを壊したかどうかを調べるためにテストを実行したいと思います。

テストはミニテストDSLで行われます。

それらを一度に実行するにはどうすればよいですか?

該当するレーキタスクなどを検索しましたが、見つかりませんでした。

4

9 に答える 9

95

Rake::TestTaskへのリンクは次のとおりです。

開始するための例がページにあります。
私が今宝石に使用している別のものを投稿します:

require 'rake/testtask'

Rake::TestTask.new do |t|
  t.pattern = "spec/*_spec.rb"
end

ご覧のとおり、ファイルはすべて含まれ/libており、仕様は含まれて/specおり、名前が付けられていると思います。whatever_spec.rb

それが役に立てば幸い。

于 2011-02-11T07:39:55.880 に答える
30

ロックの答えの方が優れていますが、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 
于 2013-02-20T15:08:52.930 に答える
19

これはRake::TestTask、多かれ少なかれ、内部で行われていることです。

ruby -Ilib -e 'ARGV.each { |f| require f }' ./test/test*.rb

注:libtest/test*.rb(上記)がデフォルトですが、それぞれtest&がより一般的です。test/*_test.rb

出典:c34d9e0行169のrake / testtask.rb

JRubyを使用していて、起動コストを2回(Rakeに1回、Rakeが開始するサブプロセスに1回)支払うことを避けたい場合は、そのコマンドを使用するだけです。

于 2013-12-19T08:55:53.140 に答える
16

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'各テストファイルの先頭に配置する必要がありました。

于 2014-05-13T23:07:55.530 に答える
7

これは、Makefileを介して実行することもできます。

default:
  echo "Dir.glob('./test/*_test.rb').each { |file| require file}" | ruby

実行makeすると、すべてのテストが実行されます。

于 2014-06-09T20:02:40.067 に答える
4

$ rake testレール5.0ボックスを使い果たしました。

于 2016-11-10T20:17:13.923 に答える
3

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 .

于 2015-07-27T18:45:32.403 に答える
1

これは非常に古い質問だと思いrake testますが、Rails 4.2では、テスト中のファイルやテスト/統合/、テスト/ユニット/などを含めて機能します。

于 2018-09-02T03:08:26.573 に答える
-1

レーキがない場合は、次のことを試してください。

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)
于 2014-05-16T01:27:54.737 に答える