class Hydra::TestTask

Define a test task that uses hydra to test the files.

Hydra::TestTask.new('hydra') do |t|
  t.add_files 'test/unit     _test.rb'
  t.add_files 'test/functional/   *_test.rb'
  t.add_files 'test/integration/   *_test.rb'
  t.verbose = false # optionally set to true for lots of debug messages
  t.autosort = false # disable automatic sorting based on runtime of tests
end

Public Class Methods

new(name = :hydra) { |self| ... } click to toggle source

Create a new HydraTestTask

# File lib/hydra/tasks.rb, line 85
def initialize(name = :hydra)
  @name = name
  @files = []
  @verbose = false
  @autosort = true
  @serial = false
  @listeners = [Hydra::Listener::ProgressBar.new]
  @show_time = true
  @options = ''

  yield self if block_given?

  # Ensure we override rspec's at_exit
  if defined?(RSpec)
    RSpec::Core::Runner.disable_autorun!
  end

  unless @serial
    @config = find_config_file
  end

  @opts = {
    :verbose => @verbose,
    :autosort => @autosort,
    :files => @files,
    :listeners => @listeners,
    :environment => @environment,
    :runner_log_file => @runner_log_file,
    :options => @options
  }
  if @config
    @opts.merge!(:config => @config)
  else
    @opts.merge!(:workers => [{:type => :local, :runners => 1}])
  end

  define
end

Private Instance Methods

define() click to toggle source

Create the rake task defined by this HydraTestTask

# File lib/hydra/tasks.rb, line 126
def define
  desc "Hydra Tests" + (@name == :hydra ? "" : " for #{@name}")
  task @name do
    if Object.const_defined?('Rails') && Rails.env == 'development'
      $stderr.puts %Q{WARNING: Rails Environment is "development". Make sure to set it properly (ex: "RAILS_ENV=test rake hydra")}
    end

    start = Time.now if @show_time

    puts '********************'
    puts @options.inspect
    master = Hydra::Master.new(@opts)

    $stdout.puts "\nFinished in #{'%.6f' % (Time.now - start)} seconds." if @show_time

    unless master.failed_files.empty?
      raise "Hydra: Not all tests passes"
    end
  end
end