spec/integration_spec.rb in parallel_tests-0.7.0.alpha vs spec/integration_spec.rb in parallel_tests-0.7.0.alpha2
- old
+ new
@@ -13,11 +13,11 @@
"/tmp/parallel_tests_tests"
end
def write(file, content)
path = "#{folder}/#{file}"
- `mkdir -p #{File.dirname(path)}` unless File.exist?(File.dirname(path))
+ ensure_folder File.dirname(path)
File.open(path, 'w'){|f| f.write content }
path
end
def bin_folder
@@ -26,48 +26,53 @@
def executable
"#{bin_folder}/parallel_test"
end
- def run_tests(options={})
+ def ensure_folder(folder)
+ `mkdir -p #{folder}` unless File.exist?(folder)
+ end
+
+ def run_tests(test_folder, options={})
+ ensure_folder folder
processes = "-n #{options[:processes]||2}" unless options[:processes] == false
- `cd #{folder} && #{options[:export]} #{executable} --chunk-timeout 999 -t #{options[:type] || 'spec'} #{processes} #{options[:add]} 2>&1`
+ result = `cd #{folder} && #{options[:export]} #{executable} #{test_folder} --chunk-timeout 999 -t #{options[:type] || 'spec'} #{processes} #{options[:add]} 2>&1`
+ raise "FAILED #{result}" if $?.success? == !!options[:fail]
+ result
end
it "runs tests in parallel" do
write 'spec/xxx_spec.rb', 'describe("it"){it("should"){puts "TEST1"}}'
write 'spec/xxx2_spec.rb', 'describe("it"){it("should"){puts "TEST2"}}'
- result = run_tests
+ result = run_tests "spec"
# test ran and gave their puts
result.should include('TEST1')
result.should include('TEST2')
# all results present
result.scan('1 example, 0 failure').size.should == 2 # 2 results
result.scan('2 examples, 0 failures').size.should == 1 # 1 summary
result.scan(/Finished in \d+\.\d+ seconds/).size.should == 2
result.scan(/Took \d+\.\d+ seconds/).size.should == 1 # parallel summary
- $?.success?.should == true
end
it "does not run any tests if there are none" do
write 'spec/xxx_spec.rb', '1'
- result = run_tests
+ result = run_tests "spec"
result.should include('No examples found')
result.should include('Took')
end
it "fails when tests fail" do
write 'spec/xxx_spec.rb', 'describe("it"){it("should"){puts "TEST1"}}'
write 'spec/xxx2_spec.rb', 'describe("it"){it("should"){1.should == 2}}'
- result = run_tests
+ result = run_tests "spec", :fail => true
result.scan('1 example, 1 failure').size.should == 1
result.scan('1 example, 0 failure').size.should == 1
result.scan('2 examples, 1 failure').size.should == 1
- $?.success?.should == false
end
it "can exec given commands with ENV['TEST_ENV_NUM']" do
result = `#{executable} -e 'ruby -e "print ENV[:TEST_ENV_NUMBER.to_s].to_i"' -n 4`
result.gsub('"','').split('').sort.should == %w[0 2 3 4]
@@ -99,65 +104,75 @@
it "runs faster with more processes" do
2.times{|i|
write "spec/xxx#{i}_spec.rb", 'describe("it"){it("should"){sleep 5}}; $stderr.puts ENV["TEST_ENV_NUMBER"]'
}
t = Time.now
- run_tests(:processes => 2)
+ run_tests("spec", :processes => 2)
expected = 10
(Time.now - t).should <= expected
end
it "can run with given files" do
write "spec/x1_spec.rb", "puts '111'"
write "spec/x2_spec.rb", "puts '222'"
write "spec/x3_spec.rb", "puts '333'"
- result = run_tests(:add => 'spec/x1_spec.rb spec/x3_spec.rb')
+ result = run_tests("spec/x1_spec.rb spec/x3_spec.rb")
result.should include('111')
result.should include('333')
result.should_not include('222')
end
+ it "runs successfully without any files" do
+ results = run_tests("")
+ results.should include("2 processes for 0 specs")
+ results.should include("Took")
+ end
+
it "can run with test-options" do
write "spec/x1_spec.rb", "111"
write "spec/x2_spec.rb", "111"
- result = run_tests(:add => "--test-options ' --version'", :processes => 2)
+ result = run_tests("spec", :add => "--test-options ' --version'", :processes => 2)
result.should =~ /\d+\.\d+\.\d+.*\d+\.\d+\.\d+/m # prints version twice
end
it "runs with PARALLEL_TEST_PROCESSORS processes" do
processes = 5
processes.times{|i|
write "spec/x#{i}_spec.rb", "puts %{ENV-\#{ENV['TEST_ENV_NUMBER']}-}"
}
- result = run_tests(:export => "PARALLEL_TEST_PROCESSORS=#{processes}", :processes => processes)
+ result = run_tests("spec", :export => "PARALLEL_TEST_PROCESSORS=#{processes}", :processes => processes)
result.scan(/ENV-.?-/).should =~ ["ENV--", "ENV-2-", "ENV-3-", "ENV-4-", "ENV-5-"]
end
context "Test::Unit" do
it "runs" do
write "test/x1_test.rb", "require 'test/unit'; class XTest < Test::Unit::TestCase; def test_xxx; end; end"
- result = run_tests(:type => :test)
+ result = run_tests("test", :type => :test)
result.should include('1 test')
- $?.success?.should == true
end
it "passes test options" do
write "test/x1_test.rb", "require 'test/unit'; class XTest < Test::Unit::TestCase; def test_xxx; end; end"
- result = run_tests(:type => :test, :add => '--test-options "-v"')
+ result = run_tests("test", :type => :test, :add => '--test-options "-v"')
result.should include('test_xxx') # verbose output of every test
end
+
+ it "runs successfully without any files" do
+ results = run_tests("", :type => "test")
+ results.should include("2 processes for 0 tests")
+ results.should include("Took")
+ end
end
context "Cucumber" do
it "passes TEST_ENV_NUMBER when running with pattern (issue #86)" do
write "features/good1.feature", "Feature: xxx\n Scenario: xxx\n Given I print TEST_ENV_NUMBER"
write "features/good2.feature", "Feature: xxx\n Scenario: xxx\n Given I print TEST_ENV_NUMBER"
write "features/b.feature", "Feature: xxx\n Scenario: xxx\n Given I FAIL"
write "features/steps/a.rb", "Given('I print TEST_ENV_NUMBER'){ puts \"YOUR TEST ENV IS \#{ENV['TEST_ENV_NUMBER']}!\" }"
- result = run_tests :type => 'features', :add => '--pattern good'
- $?.success?.should == true
+ result = run_tests "features", :type => "cucumber", :add => '--pattern good'
result.should include('YOUR TEST ENV IS 2!')
result.should include('YOUR TEST ENV IS !')
result.should_not include('I FAIL')
end
@@ -165,11 +180,16 @@
it "runs each feature once when there are more processes then features (issue #89)" do
write "features/steps/a.rb", "Given('I print TEST_ENV_NUMBER'){ puts \"YOUR TEST ENV IS \#{ENV['TEST_ENV_NUMBER']}!\" }"
2.times{|i|
write "features/good#{i}.feature", "Feature: xxx\n Scenario: xxx\n Given I print TEST_ENV_NUMBER"
}
- result = run_tests :type => 'features', :add => '-n 3'
- $?.success?.should == true
+ result = run_tests "features", :type => "cucumber", :add => '-n 3'
result.scan(/YOUR TEST ENV IS \d?!/).sort.should == ["YOUR TEST ENV IS !", "YOUR TEST ENV IS 2!"]
+ end
+
+ it "runs successfully without any files" do
+ results = run_tests("", :type => "cucumber")
+ results.should include("2 processes for 0 features")
+ results.should include("Took")
end
end
end