support for my new super-fast way of running failed tests, one-at-a-time rerun.txt-like mode
This commit is contained in:
parent
86c4d08dc3
commit
b9a04a0052
39
lib/cuke-pack/profiles.rb
Normal file
39
lib/cuke-pack/profiles.rb
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
module CukePack
|
||||||
|
class Profiles
|
||||||
|
def self.write
|
||||||
|
std_opts = "-r features --format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} -f Cucumber::StepWriter --out features/step_definitions --strict"
|
||||||
|
|
||||||
|
in_progress_file = 'in_progress.txt'
|
||||||
|
rerun_file = 'rerun.txt'
|
||||||
|
|
||||||
|
in_progress = nil
|
||||||
|
if File.file?(in_progress_file)
|
||||||
|
in_progress = File.readlines(in_progress_file).first
|
||||||
|
|
||||||
|
if in_progress
|
||||||
|
in_progress = nil if in_progress.empty?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if in_progress
|
||||||
|
File.open(rerun_file, 'wb') { |fh| fh.print in_progress }
|
||||||
|
|
||||||
|
wip_opts = %{RERUN_FILE=#{rerun_file} RUN_INPROGRESS=#{in_progress_file} #{std_opts} @#{rerun_file}}
|
||||||
|
else
|
||||||
|
wip_opts = %{#{std_opts} --tags @wip features}
|
||||||
|
end
|
||||||
|
|
||||||
|
headless_driver = ENV['DRIVER'] || 'poltergeist'
|
||||||
|
|
||||||
|
headless_opts = %{DRIVER=#{headless_driver} INPROGRESS=#{in_progress_file} #{std_opts}}
|
||||||
|
|
||||||
|
<<-YML
|
||||||
|
default: #{headless_opts} features
|
||||||
|
wip: #{wip_opts}
|
||||||
|
precommit: #{headless_opts} --tags ~@wip:0 features
|
||||||
|
cleanup: #{headless_opts} -f Cucumber::CleanupFormatter --out unused.txt features
|
||||||
|
YML
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
49
lib/cuke-pack/support/in_progress.rb
Normal file
49
lib/cuke-pack/support/in_progress.rb
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
# after tests fail, re-run only failed scenarios, but one at a time so as not to oeverwhelm
|
||||||
|
|
||||||
|
in_progress = []
|
||||||
|
any_failed = false
|
||||||
|
|
||||||
|
if ENV['INPROGRESS']
|
||||||
|
File.unlink(ENV['INPROGRESS']) if File.file?(ENV['INPROGRESS'])
|
||||||
|
end
|
||||||
|
|
||||||
|
After do |s|
|
||||||
|
if s.failed?
|
||||||
|
if ENV['INPROGRESS']
|
||||||
|
in_progress << s.feature.file_colon_line(s.line)
|
||||||
|
end
|
||||||
|
|
||||||
|
if ENV['RUN_INPROGRESS']
|
||||||
|
any_failed = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
at_exit do
|
||||||
|
include Cucumber::Term::ANSIColor
|
||||||
|
|
||||||
|
if ENV['INPROGRESS'] and !in_progress.empty?
|
||||||
|
File.open(ENV['INPROGRESS'], 'wb') { |fh| fh.print in_progress.join("\n") }
|
||||||
|
|
||||||
|
puts red("*** Failing scenarios described in #{ENV['INPROGRESS']}. Run using the wip profile until they're fixed. ***")
|
||||||
|
end
|
||||||
|
|
||||||
|
if ENV['RUN_INPROGRESS']
|
||||||
|
if !any_failed
|
||||||
|
lines = File.readlines(ENV['RUN_INPROGRESS'])
|
||||||
|
passed = lines.shift
|
||||||
|
|
||||||
|
if lines.empty?
|
||||||
|
File.unlink(ENV['RUN_INPROGRESS'])
|
||||||
|
File.unlink(ENV['RERUN_FILE'])
|
||||||
|
|
||||||
|
puts green("*** You're done! All failed features have passed. ***")
|
||||||
|
else
|
||||||
|
File.open(ENV['RUN_INPROGRESS'], 'wb') { |fh| fh.print lines.join('') }
|
||||||
|
|
||||||
|
puts yellow("*** Still working - #{lines.length} feature#{lines.length == 1 ? '' : 's'} to go! ***")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user