Module: ParallelTests

Defined in:
lib/parallel_tests/railtie.rb,
lib/parallel_tests.rb,
lib/parallel_tests/cli.rb,
lib/parallel_tests/tasks.rb,
lib/parallel_tests/grouper.rb,
lib/parallel_tests/version.rb,
lib/parallel_tests/gherkin/io.rb,
lib/parallel_tests/test/runner.rb,
lib/parallel_tests/rspec/runner.rb,
lib/parallel_tests/gherkin/runner.rb,
lib/parallel_tests/spinach/runner.rb,
lib/parallel_tests/cucumber/runner.rb,
lib/parallel_tests/gherkin/listener.rb,
lib/parallel_tests/rspec/logger_base.rb,
lib/parallel_tests/cucumber/scenarios.rb,
lib/parallel_tests/test/runtime_logger.rb,
lib/parallel_tests/gherkin/runtime_logger.rb,
lib/parallel_tests/cucumber/failures_logger.rb,
lib/parallel_tests/cucumber/scenario_line_logger.rb

Overview

rake tasks for Rails 3+

Defined Under Namespace

Modules: Cucumber, Gherkin, RSpec, Spinach, Tasks, Test Classes: CLI, Grouper, Railtie

Constant Summary collapse

WINDOWS =
(RbConfig::CONFIG['host_os'] =~ /cygwin|mswin|mingw|bccwin|wince|emx/)
GREP_PROCESSES_COMMAND =
if WINDOWS
  "wmic process get commandline | findstr TEST_ENV_NUMBER | find /c \"TEST_ENV_NUMBER=\" 2>&1"
else
  "ps -ef | grep [T]EST_ENV_NUMBER= 2>&1"
end
VERSION =
Version = '1.7.0.1'

Class Method Summary collapse

Class Method Details

.bundler_enabled?Boolean

copied from github.com/carlhuda/bundler Bundler::SharedHelpers#find_gemfile

Returns:

  • (Boolean)


28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/parallel_tests.rb', line 28

def bundler_enabled?
  return true if Object.const_defined?(:Bundler)

  previous = nil
  current = File.expand_path(Dir.pwd)

  until !File.directory?(current) || current == previous
    filename = File.join(current, "Gemfile")
    return true if File.exist?(filename)
    current, previous = File.expand_path("..", current), current
  end

  false
end

.deltaObject



68
69
70
71
72
# File 'lib/parallel_tests.rb', line 68

def delta
  before = now.to_f
  yield
  now.to_f - before
end

.determine_number_of_processes(count) ⇒ Object



19
20
21
22
23
24
25
# File 'lib/parallel_tests.rb', line 19

def determine_number_of_processes(count)
  [
    count,
    ENV["PARALLEL_TEST_PROCESSORS"],
    Parallel.processor_count
  ].detect{|c| not c.to_s.strip.empty? }.to_i
end

.first_process?Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/parallel_tests.rb', line 43

def first_process?
  !ENV["TEST_ENV_NUMBER"] || ENV["TEST_ENV_NUMBER"].to_i == 0
end

.nowObject

real time even if someone messed with timecop in tests



60
61
62
63
64
65
66
# File 'lib/parallel_tests.rb', line 60

def now
  if Time.respond_to?(:now_without_mock_time) # Timecop
    Time.now_without_mock_time
  else
    Time.now
  end
end

.number_of_running_processesObject

Fun fact: this includes the current process if it’s run via parallel_tests



53
54
55
56
57
# File 'lib/parallel_tests.rb', line 53

def number_of_running_processes
  result = `#{GREP_PROCESSES_COMMAND}`
  raise "Could not grep for processes -> #{result}" if result.strip != "" && !$?.success?
  result.split("\n").size
end

.wait_for_other_processes_to_finishObject



47
48
49
50
# File 'lib/parallel_tests.rb', line 47

def wait_for_other_processes_to_finish
  return unless ENV["TEST_ENV_NUMBER"]
  sleep 1 until number_of_running_processes <= 1
end