提交 24e0fa7c 编写于 作者: F Fumiaki MATSUSHIMA

Make `driven_by` overridable

Sometimes we want to use rack_test partially instead of selenium for test speed:

```ruby
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: {url: "http://chrome:4444/wd/hub"}
end

class WithJavaScriptTest < ApplicationSystemTestCase
end

class WithoutJavaScriptTest < ApplicationSystemTestCase
  driven_by :rack_test
end
```

In the abobe case, `WithoutJavaScriptTest` uses selenium because
`SystemTestCase` calls superclass' driver on `#initialize` (`self.class.superclass.driver.use`).

Using `class_attribute` can handle inherited `driven_by`.
上级 5ac89b16
......@@ -87,7 +87,7 @@ class SystemTestCase < IntegrationTest
def initialize(*) # :nodoc:
super
self.class.superclass.driver.use
self.class.driver.use
end
def self.start_application # :nodoc:
......@@ -100,6 +100,8 @@ def self.start_application # :nodoc:
SystemTesting::Server.new.run
end
class_attribute :driver, instance_accessor: false
# System Test configuration options
#
# The default settings are Selenium, using Chrome, with a screen size
......@@ -113,13 +115,10 @@ def self.start_application # :nodoc:
#
# driven_by :selenium, screen_size: [800, 800]
def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {})
@driver = SystemTesting::Driver.new(driver, using: using, screen_size: screen_size, options: options)
self.driver = SystemTesting::Driver.new(driver, using: using, screen_size: screen_size, options: options)
end
# Returns the driver object for the initialized system test
def self.driver
@driver ||= SystemTestCase.driven_by(:selenium)
end
driven_by :selenium
end
SystemTestCase.start_application
......
......@@ -6,6 +6,14 @@ class SetDriverToRackTestTest < DrivenByRackTest
end
end
class OverrideSeleniumSubclassToRackTestTest < DrivenBySeleniumWithChrome
driven_by :rack_test
test "uses rack_test" do
assert_equal :rack_test, Capybara.current_driver
end
end
class SetDriverToSeleniumTest < DrivenBySeleniumWithChrome
test "uses selenium" do
assert_equal :selenium, Capybara.current_driver
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册