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_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
|
||||
|
|
|
@ -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 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
|
||||
|
|
|
@ -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)
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue