diff options
author | eileencodes <eileencodes@gmail.com> | 2016-12-03 09:27:44 -0500 |
---|---|---|
committer | eileencodes <eileencodes@gmail.com> | 2017-02-20 15:07:34 -0500 |
commit | 3f414c22c70d5647d2ee9f16f7e4eec15c829afb (patch) | |
tree | 6465f3a3b1f1702d8ec8ae333592b081070f8c14 | |
parent | 970ece243d05945f59f3cdf55e44dbfe5b16d2d5 (diff) | |
download | rails-3f414c22c70d5647d2ee9f16f7e4eec15c829afb.tar.gz rails-3f414c22c70d5647d2ee9f16f7e4eec15c829afb.tar.bz2 rails-3f414c22c70d5647d2ee9f16f7e4eec15c829afb.zip |
Cleanup Rails provided helpers
1. Clean up screenshot helper
Updates documentation to be clearer and separates the concerns of saving
the image, setting the image path, and displaying the image.
2. Remove Rails provided assertions for selectors
This was moved upstream to Capybara and is no longer necessary to be
included in Rails
3. Remove form helper
The form helper is pretty specific to Basecamp's needs and may not be
helpful outside of Rails.
6 files changed, 71 insertions, 109 deletions
diff --git a/actionsystemtest/lib/action_system_test/test_helper.rb b/actionsystemtest/lib/action_system_test/test_helper.rb index 9ff5746244..46a4ac466b 100644 --- a/actionsystemtest/lib/action_system_test/test_helper.rb +++ b/actionsystemtest/lib/action_system_test/test_helper.rb @@ -3,8 +3,6 @@ require "action_system_test/test_helpers" module ActionSystemTest module TestHelper # :nodoc: - include TestHelpers::Assertions - include TestHelpers::FormHelper include TestHelpers::ScreenshotHelper include Capybara::DSL diff --git a/actionsystemtest/lib/action_system_test/test_helpers.rb b/actionsystemtest/lib/action_system_test/test_helpers.rb index 10ddeff92f..bc0e015874 100644 --- a/actionsystemtest/lib/action_system_test/test_helpers.rb +++ b/actionsystemtest/lib/action_system_test/test_helpers.rb @@ -2,8 +2,6 @@ module ActionSystemTest module TestHelpers extend ActiveSupport::Autoload - autoload :Assertions - autoload :FormHelper autoload :ScreenshotHelper end end diff --git a/actionsystemtest/lib/action_system_test/test_helpers/assertions.rb b/actionsystemtest/lib/action_system_test/test_helpers/assertions.rb deleted file mode 100644 index edc8dbaa7f..0000000000 --- a/actionsystemtest/lib/action_system_test/test_helpers/assertions.rb +++ /dev/null @@ -1,40 +0,0 @@ -module ActionSystemTest - module TestHelpers - # Assertions for system testing that aren't included by default in Capybara. - # These are assertions that are useful specifically for Rails applications. - module Assertions - # Asserts that all of the provided selectors are present on the given page. - # - # assert_all_of_selectors('p', 'td') - def assert_all_of_selectors(*items) - options = items.extract_options! - type = type_for_selector(items) - - items.each do |item| - assert_selector type, item, options - end - end - - # Asserts that none of the provided selectors are present on the page. - # - # assert_none_of_selectors('ul', 'ol') - def assert_none_of_selectors(*items) - options = items.extract_options! - type = type_for_selector(items) - - items.each do |item| - assert_no_selector type, item, options - end - end - - private - def type_for_selector(*items) - if items.first.is_a?(Symbol) - items.shift - else - Capybara.default_selector - end - end - end - end -end diff --git a/actionsystemtest/lib/action_system_test/test_helpers/form_helper.rb b/actionsystemtest/lib/action_system_test/test_helpers/form_helper.rb deleted file mode 100644 index 3c65c23f6d..0000000000 --- a/actionsystemtest/lib/action_system_test/test_helpers/form_helper.rb +++ /dev/null @@ -1,58 +0,0 @@ -module ActionSystemTest - module TestHelpers - # Form helpers for system testing that aren't included by default in - # Capybara. - module FormHelper - # Finds all provided fields or text areas and fills in with supplied values. - # - # fill_in_all_fields('Name' => 'Eileen', 'Job Title' => 'Programmer') - def fill_in_all_fields(fields) - fields.each do |name, value| - fill_in name, with: value - end - end - - # Locates a checkbox that is present inside a label and checks it. When - # using styled boxes Selenium may not be able to see the checkbox. This - # form helper looks inside the checkbox and clicks the label instead of - # setting the value of the checkbox. - # - # click_checkbox_label 'Admin' - # - # By default +click_checkbox_label+ looks for checkboxes that are not - # checked by default. To locate an already checked box and uncheck it - # set checked to true: - # - # click_checkbox_label 'Admin', checked: true - def click_checkbox_label(name, checked: false) - field = find_checkbox(name, checked) - label = find_label_wrapper(field) - label.click - end - - # In lieu of locating a button and calling +click_on+, +press_enter+ will - # submit the form via enter. This method will only work for drivers that - # load a browser like Selenium. - # - # test 'Adding a User' do - # fill_in 'Name', with: 'Arya' - # - # press_enter - # - # assert_text 'Arya' - # end - def press_enter - page.driver.browser.action.send_keys(:enter).perform - end - - private - def find_checkbox(name, checked) - find(:field, name, visible: :all, checked: checked) - end - - def find_label_wrapper(field, location: "./ancestor::label") - field.find :xpath, location - end - end - end -end diff --git a/actionsystemtest/lib/action_system_test/test_helpers/screenshot_helper.rb b/actionsystemtest/lib/action_system_test/test_helpers/screenshot_helper.rb index 1b198b9b29..d4d0d79e95 100644 --- a/actionsystemtest/lib/action_system_test/test_helpers/screenshot_helper.rb +++ b/actionsystemtest/lib/action_system_test/test_helpers/screenshot_helper.rb @@ -13,24 +13,32 @@ module ActionSystemTest # ActionSystemTest.driver.supports_screenshots? # => true def take_screenshot + save_image puts "[Screenshot]: #{image_path}" - puts find_image + puts display_image end - # Takes a screenshot only if the test failed. This is included - # by default in +teardown+ of system test. + # Takes a screenshot of the current page in the browser if the test + # failed. + # + # +take_screenshot+ is included in <tt>system_test_helper.rb</tt> that is + # generated with the application. To take screenshots when a test fails + # add +take_failed_screenshot+ to the teardown block before clearing any + # sessions. def take_failed_screenshot take_screenshot unless passed? end private def image_path - path = "tmp/screenshots/failures_#{method_name}.png" - page.save_screenshot(Rails.root.join(path)) - path + "tmp/screenshots/failures_#{method_name}.png" + end + + def save_image + page.save_screenshot(Rails.root.join(image_path)) end - def find_image + def display_image if ENV["CAPYBARA_INLINE_SCREENSHOT"] == "artifact" "\e]1338;url=artifact://#{image_path}\a" else diff --git a/actionsystemtest/test/abstract_unit.rb b/actionsystemtest/test/abstract_unit.rb index 26da9c7ccb..81630ca66d 100644 --- a/actionsystemtest/test/abstract_unit.rb +++ b/actionsystemtest/test/abstract_unit.rb @@ -3,6 +3,62 @@ require "action_controller" require "action_dispatch" require "action_system_test" +# Set the Rails tests to use the +:rack_test+ driver because +# we're not testing Capybara or it's drivers, but rather that +# the methods accept the proper arguments. +class RoutedRackApp + attr_reader :routes + + def initialize(routes, &blk) + @routes = routes + @stack = ActionDispatch::MiddlewareStack.new(&blk).build(@routes) + end + + def call(env) + @stack.call(env) + end +end + +class ActionSystemTestCase < ActionSystemTest::Base + ActionSystemTest.driver = :rack_test + + def self.build_app(routes = nil) + RoutedRackApp.new(routes || ActionDispatch::Routing::RouteSet.new) + end +end + +class PostsController < ActionController::Base + def index + render inline: <<HTML +<html> +<body> + <h1>This</h1> + <p title="the title" class="test">Paragraph 1</p> + <p title="the others" class="test">Paragraph 2</p> +</body> +</html> +HTML + end +end + +CapybaraRoutes = ActionDispatch::Routing::RouteSet.new +CapybaraRoutes.draw do + resources :posts +end + +# Initialize an application +APP = ActionSystemTestCase.build_app(CapybaraRoutes) + +# Initialize an application for Capybara +RailsApp = ActionSystemTestCase.new(APP) + +# Assign Capybara.app to original Rack Application +Capybara.app = APP + +Capybara.add_selector :title_test do + xpath { |name| XPath.css(".test")[XPath.attr(:title).is(name.to_s)] } +end + # Skips the current run on Rubinius using Minitest::Assertions#skip def rubinius_skip(message = "") skip message if RUBY_ENGINE == "rbx" |