parallel_tests 0.6.20 → 0.7.0.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/Gemfile +2 -4
- data/Gemfile.lock +7 -7
- data/Rakefile +18 -16
- data/Readme.md +15 -12
- data/bin/parallel_test +2 -98
- data/lib/parallel_tests.rb +2 -125
- data/lib/parallel_tests/cli.rb +102 -0
- data/lib/parallel_tests/cucumber/runner.rb +40 -0
- data/lib/parallel_tests/cucumber/runtime_logger.rb +58 -0
- data/lib/parallel_tests/grouper.rb +2 -2
- data/lib/parallel_tests/railtie.rb +3 -3
- data/lib/{parallel_specs/spec_failures_logger.rb → parallel_tests/spec/failures_logger.rb} +4 -3
- data/lib/{parallel_specs/spec_logger_base.rb → parallel_tests/spec/logger_base.rb} +7 -3
- data/lib/parallel_tests/spec/runner.rb +56 -0
- data/lib/{parallel_specs/spec_runtime_logger.rb → parallel_tests/spec/runtime_logger.rb} +2 -2
- data/lib/{parallel_specs/spec_summary_logger.rb → parallel_tests/spec/summary_logger.rb} +2 -2
- data/lib/parallel_tests/tasks.rb +0 -25
- data/lib/parallel_tests/test/runner.rb +126 -0
- data/lib/parallel_tests/test/runtime_logger.rb +92 -0
- data/lib/parallel_tests/version.rb +3 -0
- data/parallel_tests.gemspec +10 -61
- data/spec/parallel_tests/cucumber/runner_spec.rb +76 -0
- data/spec/{parallel_specs/spec_failure_logger_spec.rb → parallel_tests/spec/failure_logger_spec.rb} +8 -8
- data/spec/parallel_tests/spec/runner_spec.rb +178 -0
- data/spec/{parallel_specs/spec_runtime_logger_spec.rb → parallel_tests/spec/runtime_logger_spec.rb} +4 -4
- data/spec/{parallel_specs/spec_summary_logger_spec.rb → parallel_tests/spec/summary_logger_spec.rb} +2 -2
- data/spec/parallel_tests/test/runner_spec.rb +179 -0
- data/spec/parallel_tests/{runtime_logger_spec.rb → test/runtime_logger_spec.rb} +19 -16
- data/spec/parallel_tests_spec.rb +2 -158
- data/spec/spec_helper.rb +9 -7
- metadata +30 -26
- data/VERSION +0 -1
- data/lib/parallel_cucumber.rb +0 -36
- data/lib/parallel_cucumber/runtime_logger.rb +0 -57
- data/lib/parallel_specs.rb +0 -52
- data/lib/parallel_tests/runtime_logger.rb +0 -78
- data/lib/tasks/parallel_tests.rake +0 -1
- data/spec/parallel_cucumber_spec.rb +0 -72
- data/spec/parallel_specs_spec.rb +0 -173
data/lib/parallel_specs.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'parallel_tests'
|
2
|
-
|
3
|
-
class ParallelSpecs < ParallelTests
|
4
|
-
def self.run_tests(test_files, process_number, options)
|
5
|
-
exe = executable # expensive, so we cache
|
6
|
-
version = (exe =~ /\brspec\b/ ? 2 : 1)
|
7
|
-
cmd = "#{rspec_1_color if version == 1}#{exe} #{options[:test_options]} #{rspec_2_color if version == 2}#{spec_opts(version)} #{test_files*' '}"
|
8
|
-
execute_command(cmd, process_number, options)
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.executable
|
12
|
-
cmd = if File.file?("script/spec")
|
13
|
-
"script/spec"
|
14
|
-
elsif bundler_enabled?
|
15
|
-
cmd = (run("bundle show rspec") =~ %r{/rspec-1[^/]+$} ? "spec" : "rspec")
|
16
|
-
"bundle exec #{cmd}"
|
17
|
-
else
|
18
|
-
%w[spec rspec].detect{|cmd| system "#{cmd} --version > /dev/null 2>&1" }
|
19
|
-
end
|
20
|
-
cmd or raise("Can't find executables rspec or spec")
|
21
|
-
end
|
22
|
-
|
23
|
-
# legacy <-> people log to this file using rspec options
|
24
|
-
def self.runtime_log
|
25
|
-
'tmp/parallel_profile.log'
|
26
|
-
end
|
27
|
-
|
28
|
-
protected
|
29
|
-
|
30
|
-
# so it can be stubbed....
|
31
|
-
def self.run(cmd)
|
32
|
-
`#{cmd}`
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.rspec_1_color
|
36
|
-
'RSPEC_COLOR=1 ; export RSPEC_COLOR ;' if $stdout.tty?
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.rspec_2_color
|
40
|
-
'--color --tty ' if $stdout.tty?
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.spec_opts(rspec_version)
|
44
|
-
options_file = ['.rspec_parallel', 'spec/parallel_spec.opts', 'spec/spec.opts'].detect{|f| File.file?(f) }
|
45
|
-
return unless options_file
|
46
|
-
"-O #{options_file}"
|
47
|
-
end
|
48
|
-
|
49
|
-
def self.test_suffix
|
50
|
-
"_spec.rb"
|
51
|
-
end
|
52
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
class ParallelTests::RuntimeLogger
|
2
|
-
@@has_started = false
|
3
|
-
|
4
|
-
def self.log(test, start_time, end_time)
|
5
|
-
return if test.is_a? Test::Unit::TestSuite # don't log for suites-of-suites
|
6
|
-
|
7
|
-
if !@@has_started # make empty log file
|
8
|
-
File.open(ParallelTests.runtime_log, 'w') do end
|
9
|
-
@@has_started = true
|
10
|
-
end
|
11
|
-
|
12
|
-
File.open(ParallelTests.runtime_log, 'a') do |output|
|
13
|
-
begin
|
14
|
-
output.flock File::LOCK_EX
|
15
|
-
output.puts(self.message(test, start_time, end_time))
|
16
|
-
ensure
|
17
|
-
output.flock File::LOCK_UN
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.message(test, start_time, end_time)
|
23
|
-
delta="%.2f" % (end_time.to_f-start_time.to_f)
|
24
|
-
filename=class_directory(test.class) + class_to_filename(test.class) + ".rb"
|
25
|
-
message="#{filename}:#{delta}"
|
26
|
-
end
|
27
|
-
|
28
|
-
# Note: this is a best guess at conventional test directory structure, and may need
|
29
|
-
# tweaking / post-processing to match correctly for any given project
|
30
|
-
def self.class_directory(suspect)
|
31
|
-
result = "test/"
|
32
|
-
|
33
|
-
if defined?(Rails)
|
34
|
-
result += case suspect.superclass.name
|
35
|
-
when "ActionDispatch::IntegrationTest"
|
36
|
-
"integration/"
|
37
|
-
when "ActionDispatch::PerformanceTest"
|
38
|
-
"performance/"
|
39
|
-
when "ActionController::TestCase"
|
40
|
-
"functional/"
|
41
|
-
when "ActionView::TestCase"
|
42
|
-
"unit/helpers/"
|
43
|
-
else
|
44
|
-
"unit/"
|
45
|
-
end
|
46
|
-
end
|
47
|
-
result
|
48
|
-
end
|
49
|
-
|
50
|
-
# based on https://github.com/grosser/single_test/blob/master/lib/single_test.rb#L117
|
51
|
-
def self.class_to_filename(suspect)
|
52
|
-
word = suspect.to_s.dup
|
53
|
-
return word unless word.match /^[A-Z]/ and not word.match %r{/[a-z]}
|
54
|
-
|
55
|
-
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
56
|
-
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
57
|
-
word.gsub!(/\:\:/,'/')
|
58
|
-
word.tr!("-", "_")
|
59
|
-
word.downcase!
|
60
|
-
word
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
require 'test/unit/testsuite'
|
66
|
-
class Test::Unit::TestSuite
|
67
|
-
|
68
|
-
alias :run_without_timing :run unless defined? @@timing_installed
|
69
|
-
|
70
|
-
def run(result, &progress_block)
|
71
|
-
start_time=Time.now
|
72
|
-
run_without_timing(result, &progress_block)
|
73
|
-
end_time=Time.now
|
74
|
-
ParallelTests::RuntimeLogger.log(self.tests.first, start_time, end_time)
|
75
|
-
end
|
76
|
-
@@timing_installed = true
|
77
|
-
|
78
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "/../parallel_tests/tasks")
|
@@ -1,72 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ParallelCucumber do
|
4
|
-
test_tests_in_groups(ParallelCucumber, 'features', ".feature")
|
5
|
-
|
6
|
-
describe :run_tests do
|
7
|
-
before do
|
8
|
-
ParallelCucumber.stub!(:bundler_enabled?).and_return false
|
9
|
-
File.stub!(:file?).with('.bundle/environment.rb').and_return false
|
10
|
-
File.stub!(:file?).with('script/cucumber').and_return true
|
11
|
-
end
|
12
|
-
|
13
|
-
it "uses TEST_ENV_NUMBER=blank when called for process 0" do
|
14
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER= /}.and_return mocked_process
|
15
|
-
ParallelCucumber.run_tests(['xxx'],0,{})
|
16
|
-
end
|
17
|
-
|
18
|
-
it "uses TEST_ENV_NUMBER=2 when called for process 1" do
|
19
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return mocked_process
|
20
|
-
ParallelCucumber.run_tests(['xxx'],1,{})
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns the output" do
|
24
|
-
io = open('spec/spec_helper.rb')
|
25
|
-
$stdout.stub!(:print)
|
26
|
-
ParallelCucumber.should_receive(:open).and_return io
|
27
|
-
ParallelCucumber.run_tests(['xxx'],1,{})[:stdout].should =~ /\$LOAD_PATH << File/
|
28
|
-
end
|
29
|
-
|
30
|
-
it "runs bundle exec cucumber when on bundler 0.9" do
|
31
|
-
ParallelCucumber.stub!(:bundler_enabled?).and_return true
|
32
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{bundle exec cucumber}}.and_return mocked_process
|
33
|
-
ParallelCucumber.run_tests(['xxx'],1,{})
|
34
|
-
end
|
35
|
-
|
36
|
-
it "runs script/cucumber when script/cucumber is found" do
|
37
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{script/cucumber}}.and_return mocked_process
|
38
|
-
ParallelCucumber.run_tests(['xxx'],1,{})
|
39
|
-
end
|
40
|
-
|
41
|
-
it "runs cucumber by default" do
|
42
|
-
File.stub!(:file?).with('script/cucumber').and_return false
|
43
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x !~ %r{(script/cucumber)|(bundle exec cucumber)}}.and_return mocked_process
|
44
|
-
ParallelCucumber.run_tests(['xxx'],1,{})
|
45
|
-
end
|
46
|
-
|
47
|
-
it "uses options passed in" do
|
48
|
-
ParallelCucumber.should_receive(:open).with{|x,y| x =~ %r{script/cucumber .* -p default}}.and_return mocked_process
|
49
|
-
ParallelCucumber.run_tests(['xxx'],1,:test_options => '-p default')
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe :find_results do
|
54
|
-
it "finds multiple results in test output" do
|
55
|
-
output = <<EOF
|
56
|
-
And I should not see "/en/" # features/step_definitions/webrat_steps.rb:87
|
57
|
-
|
58
|
-
7 scenarios (3 failed, 4 passed)
|
59
|
-
33 steps (3 failed, 2 skipped, 28 passed)
|
60
|
-
/apps/rs/features/signup.feature:2
|
61
|
-
Given I am on "/" # features/step_definitions/common_steps.rb:12
|
62
|
-
When I click "register" # features/step_definitions/common_steps.rb:6
|
63
|
-
And I should have "2" emails # features/step_definitions/user_steps.rb:25
|
64
|
-
|
65
|
-
4 scenarios (4 passed)
|
66
|
-
40 steps (40 passed)
|
67
|
-
|
68
|
-
EOF
|
69
|
-
ParallelCucumber.find_results(output).should == ["7 scenarios (3 failed, 4 passed)", "33 steps (3 failed, 2 skipped, 28 passed)", "4 scenarios (4 passed)", "40 steps (40 passed)"]
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
data/spec/parallel_specs_spec.rb
DELETED
@@ -1,173 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'parallel_specs/spec_runtime_logger'
|
3
|
-
require 'parallel_specs/spec_summary_logger'
|
4
|
-
require 'parallel_specs/spec_failures_logger'
|
5
|
-
|
6
|
-
describe ParallelSpecs do
|
7
|
-
test_tests_in_groups(ParallelSpecs, 'spec', '_spec.rb')
|
8
|
-
|
9
|
-
describe :run_tests do
|
10
|
-
before do
|
11
|
-
File.stub!(:file?).with('script/spec').and_return false
|
12
|
-
File.stub!(:file?).with('spec/spec.opts').and_return false
|
13
|
-
File.stub!(:file?).with('spec/parallel_spec.opts').and_return false
|
14
|
-
File.stub!(:file?).with('.rspec_parallel').and_return false
|
15
|
-
ParallelSpecs.stub!(:bundler_enabled?).and_return false
|
16
|
-
end
|
17
|
-
|
18
|
-
it "uses TEST_ENV_NUMBER=blank when called for process 0" do
|
19
|
-
ParallelSpecs.should_receive(:open).with{|x,y|x=~/TEST_ENV_NUMBER= /}.and_return mocked_process
|
20
|
-
ParallelSpecs.run_tests(['xxx'],0,{})
|
21
|
-
end
|
22
|
-
|
23
|
-
it "uses TEST_ENV_NUMBER=2 when called for process 1" do
|
24
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x=~/TEST_ENV_NUMBER=2/}.and_return mocked_process
|
25
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
26
|
-
end
|
27
|
-
|
28
|
-
it "runs with color when called from cmdline" do
|
29
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x=~/ --tty /}.and_return mocked_process
|
30
|
-
$stdout.should_receive(:tty?).and_return true
|
31
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
32
|
-
end
|
33
|
-
|
34
|
-
it "runs without color when not called from cmdline" do
|
35
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x !~ / --tty /}.and_return mocked_process
|
36
|
-
$stdout.should_receive(:tty?).and_return false
|
37
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
38
|
-
end
|
39
|
-
|
40
|
-
it "runs with color for rspec 1 when called for the cmdline" do
|
41
|
-
File.should_receive(:file?).with('script/spec').and_return true
|
42
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x=~/ RSPEC_COLOR=1 /}.and_return mocked_process
|
43
|
-
$stdout.should_receive(:tty?).and_return true
|
44
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
45
|
-
end
|
46
|
-
|
47
|
-
it "runs without color for rspec 1 when not called for the cmdline" do
|
48
|
-
File.should_receive(:file?).with('script/spec').and_return true
|
49
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x !~ / RSPEC_COLOR=1 /}.and_return mocked_process
|
50
|
-
$stdout.should_receive(:tty?).and_return false
|
51
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
52
|
-
end
|
53
|
-
|
54
|
-
it "run bundle exec spec when on bundler rspec 1" do
|
55
|
-
File.stub!(:file?).with('script/spec').and_return false
|
56
|
-
ParallelSpecs.stub!(:bundler_enabled?).and_return true
|
57
|
-
ParallelSpecs.stub!(:run).with("bundle show rspec").and_return "/foo/bar/rspec-1.0.2"
|
58
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{bundle exec spec}}.and_return mocked_process
|
59
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
60
|
-
end
|
61
|
-
|
62
|
-
it "run bundle exec rspec when on bundler rspec 2" do
|
63
|
-
File.stub!(:file?).with('script/spec').and_return false
|
64
|
-
ParallelSpecs.stub!(:bundler_enabled?).and_return true
|
65
|
-
ParallelSpecs.stub!(:run).with("bundle show rspec").and_return "/foo/bar/rspec-2.0.2"
|
66
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{bundle exec rspec}}.and_return mocked_process
|
67
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
68
|
-
end
|
69
|
-
|
70
|
-
it "runs script/spec when script/spec can be found" do
|
71
|
-
File.should_receive(:file?).with('script/spec').and_return true
|
72
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec}}.and_return mocked_process
|
73
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
74
|
-
end
|
75
|
-
|
76
|
-
it "runs spec when script/spec cannot be found" do
|
77
|
-
File.stub!(:file?).with('script/spec').and_return false
|
78
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x !~ %r{script/spec}}.and_return mocked_process
|
79
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
80
|
-
end
|
81
|
-
|
82
|
-
it "uses no -O when no opts where found" do
|
83
|
-
File.stub!(:file?).with('spec/spec.opts').and_return false
|
84
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x !~ %r{spec/spec.opts}}.and_return mocked_process
|
85
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
86
|
-
end
|
87
|
-
|
88
|
-
it "uses -O spec/spec.opts when found (with script/spec)" do
|
89
|
-
File.stub!(:file?).with('script/spec').and_return true
|
90
|
-
File.stub!(:file?).with('spec/spec.opts').and_return true
|
91
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec\s+ -O spec/spec.opts}}.and_return mocked_process
|
92
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
93
|
-
end
|
94
|
-
|
95
|
-
it "uses -O spec/parallel_spec.opts when found (with script/spec)" do
|
96
|
-
File.stub!(:file?).with('script/spec').and_return true
|
97
|
-
File.should_receive(:file?).with('spec/parallel_spec.opts').and_return true
|
98
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec\s+ -O spec/parallel_spec.opts}}.and_return mocked_process
|
99
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
100
|
-
end
|
101
|
-
|
102
|
-
it "uses -O .rspec_parallel when found (with script/spec)" do
|
103
|
-
File.stub!(:file?).with('script/spec').and_return true
|
104
|
-
File.should_receive(:file?).with('.rspec_parallel').and_return true
|
105
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{script/spec\s+ -O .rspec_parallel}}.and_return mocked_process
|
106
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
107
|
-
end
|
108
|
-
|
109
|
-
it "uses -O spec/parallel_spec.opts with rspec1" do
|
110
|
-
File.should_receive(:file?).with('spec/parallel_spec.opts').and_return true
|
111
|
-
|
112
|
-
ParallelSpecs.stub!(:bundler_enabled?).and_return true
|
113
|
-
ParallelSpecs.stub!(:run).with("bundle show rspec").and_return "/foo/bar/rspec-1.0.2"
|
114
|
-
|
115
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{spec\s+ -O spec/parallel_spec.opts}}.and_return mocked_process
|
116
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
117
|
-
end
|
118
|
-
|
119
|
-
it "uses -O spec/parallel_spec.opts with rspec2" do
|
120
|
-
File.should_receive(:file?).with('spec/parallel_spec.opts').and_return true
|
121
|
-
|
122
|
-
ParallelSpecs.stub!(:bundler_enabled?).and_return true
|
123
|
-
ParallelSpecs.stub!(:run).with("bundle show rspec").and_return "/foo/bar/rspec-2.4.2"
|
124
|
-
|
125
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{rspec\s+ --color --tty -O spec/parallel_spec.opts}}.and_return mocked_process
|
126
|
-
ParallelSpecs.run_tests(['xxx'],1,{})
|
127
|
-
end
|
128
|
-
|
129
|
-
it "uses options passed in" do
|
130
|
-
ParallelSpecs.should_receive(:open).with{|x,y| x =~ %r{rspec -f n}}.and_return mocked_process
|
131
|
-
ParallelSpecs.run_tests(['xxx'],1, :test_options => '-f n')
|
132
|
-
end
|
133
|
-
|
134
|
-
it "returns the output" do
|
135
|
-
io = open('spec/spec_helper.rb')
|
136
|
-
$stdout.stub!(:print)
|
137
|
-
ParallelSpecs.should_receive(:open).and_return io
|
138
|
-
ParallelSpecs.run_tests(['xxx'],1,{})[:stdout].should =~ /\$LOAD_PATH << File/
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
describe :find_results do
|
143
|
-
it "finds multiple results in spec output" do
|
144
|
-
output = <<EOF
|
145
|
-
....F...
|
146
|
-
..
|
147
|
-
failute fsddsfsd
|
148
|
-
...
|
149
|
-
ff.**..
|
150
|
-
0 examples, 0 failures, 0 pending
|
151
|
-
ff.**..
|
152
|
-
1 example, 1 failure, 1 pending
|
153
|
-
EOF
|
154
|
-
|
155
|
-
ParallelSpecs.find_results(output).should == ['0 examples, 0 failures, 0 pending','1 example, 1 failure, 1 pending']
|
156
|
-
end
|
157
|
-
|
158
|
-
it "is robust against scrambeled output" do
|
159
|
-
output = <<EOF
|
160
|
-
....F...
|
161
|
-
..
|
162
|
-
failute fsddsfsd
|
163
|
-
...
|
164
|
-
ff.**..
|
165
|
-
0 exFampl*es, 0 failures, 0 pend.ing
|
166
|
-
ff.**..
|
167
|
-
1 exampF.les, 1 failures, 1 pend.ing
|
168
|
-
EOF
|
169
|
-
|
170
|
-
ParallelSpecs.find_results(output).should == ['0 examples, 0 failures, 0 pending','1 examples, 1 failures, 1 pending']
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|