1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Refactor system test driver/browser

Since using a browser is only for selenium it doesn't really make sense
to have a separate class for handling it there. This brings a lot of the
if/else out of the main SystemTestCase class and into the Driver class
so we can abstract away all that extra work.
This commit is contained in:
eileencodes 2017-03-05 09:38:27 -05:00
parent 37770bc8d1
commit 4dbebe487d
6 changed files with 35 additions and 56 deletions

View file

@ -2,7 +2,6 @@ require "capybara/dsl"
require "action_controller"
require "action_dispatch/system_testing/driver"
require "action_dispatch/system_testing/server"
require "action_dispatch/system_testing/browser"
require "action_dispatch/system_testing/test_helpers/screenshot_helper"
require "action_dispatch/system_testing/test_helpers/setup_and_teardown"
@ -105,21 +104,13 @@ module ActionDispatch
#
# driven_by :selenium, screen_size: [800, 800]
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400])
driver = if selenium?(driver)
SystemTesting::Browser.new(using, screen_size)
else
SystemTesting::Driver.new(driver)
end
driver = SystemTesting::Driver.new(driver, using: using, screen_size: screen_size)
setup { driver.use }
teardown { driver.reset }
SystemTesting::Server.new.run
end
def self.selenium?(driver) # :nodoc:
driver == :selenium
end
end
SystemTestCase.start_application

View file

@ -1,27 +0,0 @@
require "action_dispatch/system_testing/driver"
module ActionDispatch
module SystemTesting
class Browser < Driver # :nodoc:
def initialize(name, screen_size)
super(name)
@name = name
@screen_size = screen_size
end
def use
register
super
end
private
def register
Capybara.register_driver @name do |app|
Capybara::Selenium::Driver.new(app, browser: @name).tap do |driver|
driver.browser.manage.window.size = Selenium::WebDriver::Dimension.new(*@screen_size)
end
end
end
end
end
end

View file

@ -1,18 +1,38 @@
module ActionDispatch
module SystemTesting
class Driver # :nodoc:
def initialize(name)
def initialize(name, **options)
@name = name
@browser = options[:using]
@screen_size = options[:screen_size]
end
def use
@current = Capybara.current_driver
Capybara.current_driver = @name
register if selenium?
setup
end
def reset
Capybara.current_driver = @current
end
private
def selenium?
@name == :selenium
end
def register
Capybara.register_driver @name do |app|
Capybara::Selenium::Driver.new(app, browser: @browser).tap do |driver|
driver.browser.manage.window.size = Selenium::WebDriver::Dimension.new(*@screen_size)
end
end
end
def setup
Capybara.current_driver = @name
@current = Capybara.current_driver
end
end
end
end

View file

@ -1,10 +0,0 @@
require "abstract_unit"
require "action_dispatch/system_testing/browser"
class BrowserTest < ActiveSupport::TestCase
test "initializing the browser" do
browser = ActionDispatch::SystemTesting::Browser.new(:chrome, [ 1400, 1400 ])
assert_equal :chrome, browser.instance_variable_get(:@name)
assert_equal [ 1400, 1400 ], browser.instance_variable_get(:@screen_size)
end
end

View file

@ -6,4 +6,15 @@ class DriverTest < ActiveSupport::TestCase
driver = ActionDispatch::SystemTesting::Driver.new(:selenium)
assert_equal :selenium, driver.instance_variable_get(:@name)
end
test "initializing the driver with a browser" do
driver = ActionDispatch::SystemTesting::Driver.new(:selenium, using: :chrome, screen_size: [ 1400, 1400 ])
assert_equal :selenium, driver.instance_variable_get(:@name)
assert_equal :chrome, driver.instance_variable_get(:@using)
assert_equal [ 1400, 1400 ], driver.instance_variable_get(:@screen_size)
end
test "selenium? returns false if driver is poltergeist" do
assert_not ActionDispatch::SystemTesting::Driver.new(:poltergeist).send(:selenium?)
end
end

View file

@ -1,11 +1,5 @@
require "abstract_unit"
class DrivenByCaseTestTest < ActiveSupport::TestCase
test "selenium? returns false if driver is poltergeist" do
assert_not ActionDispatch::SystemTestCase.selenium?(:poltergeist)
end
end
class DrivenByRackTestTest < ActionDispatch::SystemTestCase
driven_by :rack_test