jam-cloud/features/support/before_cucumber.rb

57 lines
1.9 KiB
Ruby

require 'active_record'
require 'action_mailer'
require 'jam_db'
require 'jam_ruby'
require 'capybara'
require 'selenium/webdriver'
require File.expand_path('../../../spec/spec_db', __FILE__)
include JamRuby
# put this in a class, so that multiple loads of this file
# don't cause the database to be recreated multiple times
class BeforeCucumber
def initialize
# recreate test database and migrate it
db_config = YAML::load(File.open('config/database.yml'))["cucumber"]
SpecDb::recreate_database(db_config)
# put ActionMailer into test mode
ActionMailer::Base.delivery_method = :test
end
end
if ENV['SHOW_JS_ERRORS'] == "1"
# we need a firefox extension to start intercepting javascript errors before the page
# scripts load
Capybara.register_driver :selenium do |app|
profile = Selenium::WebDriver::Firefox::Profile.new
# see https://github.com/mguillem/JSErrorCollector
profile.add_extension File.join(Rails.root, "features/support/extensions/JSErrorCollector.xpi")
Capybara::Selenium::Driver.new app, :profile => profile
end
After do |scenario|
if page.driver.to_s.match("Selenium")
errors = page.execute_script("return window.JSErrorCollector_errors.pump()")
if errors.any?
puts '-------------------------------------------------------------'
puts "Found #{errors.length} javascript errors"
puts '-------------------------------------------------------------'
errors.each do |error|
puts " #{error["errorMessage"]} (#{error["sourceName"]}:#{error["lineNumber"]})"
end
# raise "Javascript error detected, see above"
else
puts '-------------------------------------------------------------'
puts "No javascript errors"
puts '-------------------------------------------------------------'
end
end
end
end