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:
parent
37770bc8d1
commit
4dbebe487d
6 changed files with 35 additions and 56 deletions
|
@ -2,7 +2,6 @@ require "capybara/dsl"
|
||||||
require "action_controller"
|
require "action_controller"
|
||||||
require "action_dispatch/system_testing/driver"
|
require "action_dispatch/system_testing/driver"
|
||||||
require "action_dispatch/system_testing/server"
|
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/screenshot_helper"
|
||||||
require "action_dispatch/system_testing/test_helpers/setup_and_teardown"
|
require "action_dispatch/system_testing/test_helpers/setup_and_teardown"
|
||||||
|
|
||||||
|
@ -105,21 +104,13 @@ module ActionDispatch
|
||||||
#
|
#
|
||||||
# driven_by :selenium, screen_size: [800, 800]
|
# driven_by :selenium, screen_size: [800, 800]
|
||||||
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400])
|
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400])
|
||||||
driver = if selenium?(driver)
|
driver = SystemTesting::Driver.new(driver, using: using, screen_size: screen_size)
|
||||||
SystemTesting::Browser.new(using, screen_size)
|
|
||||||
else
|
|
||||||
SystemTesting::Driver.new(driver)
|
|
||||||
end
|
|
||||||
|
|
||||||
setup { driver.use }
|
setup { driver.use }
|
||||||
teardown { driver.reset }
|
teardown { driver.reset }
|
||||||
|
|
||||||
SystemTesting::Server.new.run
|
SystemTesting::Server.new.run
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.selenium?(driver) # :nodoc:
|
|
||||||
driver == :selenium
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
SystemTestCase.start_application
|
SystemTestCase.start_application
|
||||||
|
|
|
@ -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
|
|
|
@ -1,18 +1,38 @@
|
||||||
module ActionDispatch
|
module ActionDispatch
|
||||||
module SystemTesting
|
module SystemTesting
|
||||||
class Driver # :nodoc:
|
class Driver # :nodoc:
|
||||||
def initialize(name)
|
def initialize(name, **options)
|
||||||
@name = name
|
@name = name
|
||||||
|
@browser = options[:using]
|
||||||
|
@screen_size = options[:screen_size]
|
||||||
end
|
end
|
||||||
|
|
||||||
def use
|
def use
|
||||||
@current = Capybara.current_driver
|
register if selenium?
|
||||||
Capybara.current_driver = @name
|
setup
|
||||||
end
|
end
|
||||||
|
|
||||||
def reset
|
def reset
|
||||||
Capybara.current_driver = @current
|
Capybara.current_driver = @current
|
||||||
end
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -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
|
|
|
@ -6,4 +6,15 @@ class DriverTest < ActiveSupport::TestCase
|
||||||
driver = ActionDispatch::SystemTesting::Driver.new(:selenium)
|
driver = ActionDispatch::SystemTesting::Driver.new(:selenium)
|
||||||
assert_equal :selenium, driver.instance_variable_get(:@name)
|
assert_equal :selenium, driver.instance_variable_get(:@name)
|
||||||
end
|
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
|
end
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
require "abstract_unit"
|
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
|
class DrivenByRackTestTest < ActionDispatch::SystemTestCase
|
||||||
driven_by :rack_test
|
driven_by :rack_test
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue