class Saucer::Parallel

Attributes

number[RW]
output[RW]
path[RW]

Public Class Methods

new(opt = {}) click to toggle source
# File lib/saucer/parallel.rb, line 9
def initialize(opt = {})
  @number = opt[:number] || ENV['PARALLEL_PROCESSES']
  @path = opt[:path] || ENV['TEST_PATH'] || "spec"
  @output = opt[:output] || ENV['REPORT_OUTPUT'] || 'output'
  @platforms = opt[:platforms] || []
  if File.exist?('configs/platform_configs.yml')
    yaml = YAML.load_file('configs/platform_configs.yml')
    @platforms ||= yaml.map { |c| Saucer::PlatformConfiguration.new(c) }
  end
  @success = true
end

Public Instance Methods

execute_test() click to toggle source
# File lib/saucer/parallel.rb, line 46
def execute_test
  if path.include?('spec')
    ENV['PARALLEL_SPLIT_TEST_PROCESSES'] = number.to_s if number
    system "parallel_split_test #{path} --out #{@output}.xml"
  elsif path.include?('features')
    system "parallel_cucumber #{path} -o \"--format junit --out #{@output} --format pretty\" -n #{number.to_s}"
  else
    raise ArgumentError, "Unable to determine if using rspec or cucumber"
  end
end
run() click to toggle source
# File lib/saucer/parallel.rb, line 21
def run
  if @platforms.empty?
    raise StandardError, "Tests failed!" unless execute_test
    return
  end

  @platforms.each do |platform|
    Rake::Task.define_task(platform.name) {
      ENV['platform'] = platform.to_hash[:platform]
      ENV['browser_name'] = platform.to_hash[:browserName]
      ENV['version'] = platform.to_hash[:version]

      begin
        @result = execute_test
      ensure
        @success &= @result
      end
    }
  end

  Rake::MultiTask.define_task(sauce_tests: @platforms.map(&:name)) {
    raise StandardError, "Tests failed!" unless @success
  }.invoke
end