class Rake::TestTask

  1. lib/rake/testtask.rb
Parent: Rake

Create a task that runs a set of tests.

Example: do |t|
  t.libs << "test"
  t.test_files = FileList['test/test*.rb']
  t.verbose = true

If rake is invoked with a “TEST=filename” command line option, then the list of test files will be overridden to include only the filename specified on the command line. This provides an easy way to run just one test.

If rake is invoked with a “TESTOPTS=options” command line option, then the given options are passed to the test process after a ’—’. This allows Test::Unit options to be passed to the test suite.


rake test                           # run tests normally
rake test TEST=just_one_file.rb     # run just one test file.
rake test TESTOPTS="-v"             # run in verbose mode
rake test TESTOPTS="--runner=fox"   # use the fox test runner


name [RW]

Name of test task. (default is :test)

libs [RW]

List of directories to added to $LOAD_PATH before running the tests. (default is ‘lib’)

verbose [RW]

True if verbose test output desired. (default is false)

options [RW]

Test options passed to the test suite. An explicit TESTOPTS=opts on the command line will override this. (default is NONE)

warning [RW]

Request that the tests be run with the warning flag set. E.g. warning=true implies “ruby -w” used to run the tests.

pattern [RW]

Glob pattern to match test files. (default is ‘test/test*.rb’)

loader [RW]

Style of test loader to use. Options are:

  • :rake — Rake provided test loading script (default).

  • :testrb — Ruby provided test loading script.

  • :direct — Load tests using command line loader.

ruby_opts [RW]

Array of commandline options to pass to ruby when running test loader.

Public Instance methods

test_files= (list)

Explicitly define the list of test files to be included in a test. list is expected to be an array of file names (a FileList is acceptable). If both pattern and test_files are used, then the list of test files is the union of the two.

[show source]
    # File lib/rake/testtask.rb, line 74
74:     def test_files=(list)
75:       @test_files = list
76:     end
define ()

Create the tasks defined by this task lib.

[show source]
     # File lib/rake/testtask.rb, line 95
 95:     def define
 96:       desc "Run tests" + (@name==:test ? "" : " for #{@name}")
 97:       task @name do
 98:         FileUtilsExt.verbose(@verbose) do
 99:           ruby "#{ruby_opts_string} #{run_code} #{file_list_string} #{option_list}"
100:         end
101:       end
102:       self
103:     end
ruby_opts_string ()
[show source]
     # File lib/rake/testtask.rb, line 114
114:     def ruby_opts_string
115:       opts = @ruby_opts.dup
116:       opts.unshift( "-I\"#{lib_path}\"" ) unless @libs.empty?
117:       opts.unshift( "-w" ) if @warning
118:       opts.join(" ")
119:     end
lib_path ()
[show source]
     # File lib/rake/testtask.rb, line 121
121:     def lib_path
122:       @libs.join(File::PATH_SEPARATOR)
123:     end
file_list_string ()
[show source]
     # File lib/rake/testtask.rb, line 125
125:     def file_list_string
126:       file_list.collect { |fn| "\"#{fn}\"" }.join(' ')
127:     end
ruby_version ()
[show source]
     # File lib/rake/testtask.rb, line 149
149:     def ruby_version
150:       RUBY_VERSION
151:     end
run_code ()
[show source]
     # File lib/rake/testtask.rb, line 153
153:     def run_code
154:       case @loader
155:       when :direct
156:         "-e \"ARGV.each{|f| require f}\""
157:       when :testrb
158:         "-S testrb #{fix}"
159:       when :rake
160:         "-I\"#{rake_lib_dir}\" \"#{rake_loader}\""
161:       end
162:     end

Public Class methods

new (name=:test)

Create a testing task.

[show source]
    # File lib/rake/testtask.rb, line 79
79:     def initialize(name=:test)
80:       @name = name
81:       @libs = ["lib"]
82:       @pattern = nil
83:       @options = nil
84:       @test_files = nil
85:       @verbose = false
86:       @warning = false
87:       @loader = :rake
88:       @ruby_opts = []
89:       yield self if block_given?
90:       @pattern = 'test/test*.rb' if @pattern.nil? && @test_files.nil?
91:       define
92:     end