Class: ActionDispatch::SystemTestCase
- Inherits:
-
IntegrationTest
- Object
- ActiveSupport::TestCase
- IntegrationTest
- ActionDispatch::SystemTestCase
- Includes:
- ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper, ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown, ActionDispatch::SystemTesting::TestHelpers::UndefMethods, Capybara::DSL, Capybara::Minitest::Assertions
- Defined in:
- lib/action_dispatch/system_test_case.rb
Overview
System Testing
System tests let you test applications in the browser. Because system tests use a real browser experience, you can test all of your JavaScript easily from your test suite.
To create a system test in your application, extend your test class from ApplicationSystemTestCase
. System tests use Capybara as a base and allow you to configure the settings through your application_system_test_case.rb
file that is generated with a new application or scaffold.
Here is an example system test:
require 'application_system_test_case'
class Users::CreateTest < ApplicationSystemTestCase
test "adding a new user" do
visit users_path
click_on 'New User'
fill_in 'Name', with: 'Arya'
click_on 'Create User'
assert_text 'Arya'
end
end
When generating an application or scaffold, an application_system_test_case.rb
file will also be generated containing the base class for system testing. This is where you can change the driver, add Capybara settings, and other configuration for your system tests.
require "test_helper"
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
end
By default, ActionDispatch::SystemTestCase
is driven by the Selenium driver, with the Chrome browser, and a browser size of 1400x1400.
Changing the driver configuration options is easy. Let's say you want to use the Firefox browser instead of Chrome. In your application_system_test_case.rb
file add the following:
require "test_helper"
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :selenium, using: :firefox
end
driven_by
has a required argument for the driver name. The keyword arguments are :using
for the browser and :screen_size
to change the size of the browser screen. These two options are not applicable for headless drivers and will be silently ignored if passed.
Headless browsers such as headless Chrome and headless Firefox are also supported. You can use these browsers by setting the :using
argument to :headless_chrome
or :headless_firefox
.
To use a headless driver, like Poltergeist, update your Gemfile to use Poltergeist instead of Selenium and then declare the driver name in the application_system_test_case.rb
file. In this case, you would leave out the :using
option because the driver is headless, but you can still use :screen_size
to change the size of the browser screen, also you can use :options
to pass options supported by the driver. Please refer to your driver documentation to learn about supported options.
require "test_helper"
require "capybara/poltergeist"
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
driven_by :poltergeist, screen_size: [1400, 1400], options:
{ js_errors: true }
end
Because ActionDispatch::SystemTestCase
is a shim between Capybara and Rails, any driver that is supported by Capybara is supported by system tests as long as you include the required gems and files.
Constant Summary
Constants included from ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown
ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown::DEFAULT_HOST
Constants included from Integration::Runner
Integration::Runner::APP_SESSIONS
Constants included from Assertions::ResponseAssertions
Assertions::ResponseAssertions::RESPONSE_PREDICATES
Instance Attribute Summary
Attributes included from Integration::Runner
Class Method Summary collapse
-
.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {}) ⇒ Object
System Test configuration options.
-
.start_application ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#initialize ⇒ SystemTestCase
constructor
:nodoc:.
Methods included from ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper
#take_failed_screenshot, #take_screenshot
Methods included from ActionDispatch::SystemTesting::TestHelpers::SetupAndTeardown
#after_teardown, #before_setup, #host!
Methods included from IntegrationTest::Behavior
Methods included from ActionController::TemplateAssertions
Methods included from Integration::Runner
#before_setup, #copy_session_variables!, #create_session, #default_url_options, #default_url_options=, #integration_session, #open_session, #remove!, #reset!
Methods included from Assertions
Methods included from Assertions::RoutingAssertions
#assert_generates, #assert_recognizes, #assert_routing, #method_missing, #with_routing
Methods included from Assertions::ResponseAssertions
#assert_redirected_to, #assert_response
Methods included from TestProcess::FixtureFile
Constructor Details
#initialize ⇒ SystemTestCase
:nodoc:
102 103 104 105 |
# File 'lib/action_dispatch/system_test_case.rb', line 102 def initialize(*) # :nodoc: super self.class.driver.use end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class ActionDispatch::Integration::Runner
Class Method Details
.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {}) ⇒ Object
System Test configuration options
The default settings are Selenium, using Chrome, with a screen size of 1400x1400.
Examples:
driven_by :poltergeist
driven_by :selenium, screen_size: [800, 800]
driven_by :selenium, using: :chrome
driven_by :selenium, using: :headless_chrome
driven_by :selenium, using: :firefox
driven_by :selenium, using: :headless_firefox
137 138 139 |
# File 'lib/action_dispatch/system_test_case.rb', line 137 def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {}) self.driver = SystemTesting::Driver.new(driver, using: using, screen_size: screen_size, options: ) end |
.start_application ⇒ Object
:nodoc:
107 108 109 110 111 112 113 114 115 |
# File 'lib/action_dispatch/system_test_case.rb', line 107 def self.start_application # :nodoc: Capybara.app = Rack::Builder.new do map "/" do run Rails.application end end SystemTesting::Server.new.run end |