module EffectiveTestBot
Watch for any rails server exceptions and write the stacktrace to ./tmp/test_bot/exception.txt This file is checked for by assert_no_exceptions
Constants
- VERSION
Public Class Methods
autosave_animated_gif_on_failure?()
click to toggle source
# File lib/effective_test_bot.rb, line 74 def self.autosave_animated_gif_on_failure? autosave_animated_gif_on_failure && gifs? end
config_keys()
click to toggle source
# File lib/effective_test_bot.rb, line 11 def self.config_keys [ :user, :except, :only, :fail_fast, :form_fills, :screenshots, :autosave_animated_gif_on_failure, :tour_mode, :tour_mode_extreme, :animated_gif_delay, :animated_gif_background_color, :image_processing_class_name, :backtrace_lines, :silence_skipped_routes ] end
excepts()
click to toggle source
# File lib/effective_test_bot.rb, line 152 def self.excepts @@excepts ||= flatten_and_sort(except) end
fail_fast?()
click to toggle source
# File lib/effective_test_bot.rb, line 78 def self.fail_fast? if (ENV['FAIL_FAST'] || ENV['FAILFAST']).present? ['true', '1'].include?((ENV['FAIL_FAST'] || ENV['FAILFAST']).to_s.downcase) else fail_fast == true end end
failed_tests_only?()
click to toggle source
# File lib/effective_test_bot.rb, line 86 def self.failed_tests_only? if (ENV['FAILS'] || ENV['FAIL']).present? ['true', '1'].include?((ENV['FAILS'] || ENV['FAIL']).to_s.downcase) else false end end
flatten_and_sort(skips)
click to toggle source
We need to flatten any Hashes into
'users#create_invalid' => ['assert_path', 'assert_page_title'],
into this [‘users#create_invalid assert_path’ ‘users#create_invalid assert_page_title’]
# File lib/effective_test_bot.rb, line 170 def self.flatten_and_sort(skips) Array(skips).flat_map do |skip| case skip when Symbol skip.to_s when Hash skip.keys.product(skip.values.flatten).map { |p| p.join(' ') } else skip end end.compact.sort end
gifs?()
click to toggle source
# File lib/effective_test_bot.rb, line 66 def self.gifs? screenshots? && image_processing_class.present? end
image_processing_class()
click to toggle source
# File lib/effective_test_bot.rb, line 70 def self.image_processing_class @@image_processing_class ||= image_processing_class_name.safe_constantize end
load_passed_tests()
click to toggle source
# File lib/effective_test_bot.rb, line 115 def self.load_passed_tests {}.tap do |tests| (File.readlines(passed_tests_filename).each { |line| tests[line.chomp] = true } rescue nil) end end
onlies()
click to toggle source
# File lib/effective_test_bot.rb, line 140 def self.onlies @@onlines ||= begin flatten_and_sort( if ENV['TEST_BOT_TEST'].present? ENV['TEST_BOT_TEST'].to_s.gsub('[', '').gsub(']', '').split(',').map { |str| str.strip } else only end ) end end
passed_tests()
click to toggle source
# File lib/effective_test_bot.rb, line 111 def self.passed_tests @@passed_tests ||= load_passed_tests end
passed_tests_filename()
click to toggle source
# File lib/effective_test_bot.rb, line 187 def self.passed_tests_filename "#{passed_tests_path}/passed_tests.txt" end
passed_tests_path()
click to toggle source
# File lib/effective_test_bot.rb, line 183 def self.passed_tests_path "#{Rails.root}/tmp/test_bot" end
save_passed_test(name)
click to toggle source
# File lib/effective_test_bot.rb, line 121 def self.save_passed_test(name) return if EffectiveTestBot.passed_tests[name] == true EffectiveTestBot.passed_tests[name] = true # Make test pass directory. These can inconsistently fail when doing parallel tests unless Dir.exist?("#{Rails.root}/tmp") (Dir.mkdir("#{Rails.root}/tmp") rescue false) end unless Dir.exist?("#{Rails.root}/tmp/test_bot") (Dir.mkdir("#{Rails.root}/tmp/test_bot") rescue false) end File.open(passed_tests_filename, 'a') { |file| file.puts(name) } end
screenshots?()
click to toggle source
If you call rake test:bot TOUR=false, then disable screenshots too
# File lib/effective_test_bot.rb, line 62 def self.screenshots? screenshots == true end
skip?(test, assertion = nil)
click to toggle source
Test could be something like “crud_test”, “crud_test (documents#new)”, “documents”, documents#new“ Assertion will be page_title, or flash
# File lib/effective_test_bot.rb, line 30 def self.skip?(test, assertion = nil) return false if (test || assertion).blank? test = test.to_s assertion = assertion.to_s # If I get passed a method_name, "crud_test: (posts#create_invalid)" extract the inner test name from it # I dunno why this is needed really, but it might help someone one day. if test.include?('_test: (') # This is how the BaseDsl test_bot_method_name formats the test names. left = test.index('(') || -1 right = test.rindex(')') || (test.length+1) test = test[(left+1)..(right-1)] end if failed_tests_only? && test.present? && passed_tests[test] return true end value = "#{test} #{assertion}".strip # This is the format config.excepts is flattened into test_prefix = test.split('#').first # Excepts are defined in the app's config/initializers/effective_test_bot.rb file return true if excepts.any? { |except| [test, test_prefix, assertion, value].include?(except) } # Onlies are defined in the same config file, or on the command like rake test:bot TEST=posts#new # It doesn't match just 'flash' or 'page_title' assertions return true if onlies.present? && onlies.find { |only| test.start_with?(only) }.blank? false # Don't skip this test end
tour_mode?()
click to toggle source
# File lib/effective_test_bot.rb, line 94 def self.tour_mode? if ENV['TOUR'].present? ENV['TOUR'].to_s != 'false' else gifs? && (tour_mode != false) end end
tour_mode_extreme?()
click to toggle source
form_filler will take a screenshot after every form field is filled
# File lib/effective_test_bot.rb, line 103 def self.tour_mode_extreme? if ENV['TOUR'].present? ['extreme', 'debug'].include?(ENV['TOUR'].to_s.downcase) else gifs? && ['extreme', 'debug'].include?(tour_mode.to_s) end end