1. 29 3月, 2017 1 次提交
    • F
      Make `driven_by` overridable · 24e0fa7c
      Fumiaki MATSUSHIMA 提交于
      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`.
      24e0fa7c
  2. 13 3月, 2017 1 次提交
    • F
      Pass options to `driven_by` · ec99107a
      Fumiaki MATSUSHIMA 提交于
      Capybara drivers can handle some options such like `url`.
      
      ### before
      
      ```
      # test/test_helper.rb
      Capybara.register_driver :remote_chrome do |app|
        Capybara::Selenium::Driver.new(app, browser: :chrome, url: "http://example.com/wd/hub")
      end
      
      # test/application_system_test_case.rb
      class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
        driven_by :remote_chrome
      end
      ```
      
      ### after
      
      ```
      # test/application_system_test_case.rb
      class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
        driven_by :selenium, using: :chrome, screen_size: [1400, 1400], options: {url: "http://chrome:4444/wd/hub"}
      end
      ```
      ec99107a
  3. 09 3月, 2017 2 次提交
    • E
      Call system test driver per-instance rather than globally · 7c9af60e
      eileencodes 提交于
      Previously the system test subclasses would call `driven_by` when the
      app booted and not again when the test was initialized which resulted in
      the driver from whichever class was called last to be used in tests.
      
      In rails/rails#28144 the `driven_by` method was changed to run `use` on
      setup and `reset` on teardown. While this was a viable fix this really
      pointed to the problem that system test `driven_by` was a global
      setting, rather than a per-class setting.
      
      To alieviate this problem calling the driver should be done on an
      instance level, rather than on the global level. I added an `initialize`
      method to `SystemTestCase` which will call `use` on the superclass
      driver. Running the server has been moved to `start_application` so that
      it only needs to be called once on boot and no options from `driven_by`
      were being passed to it.
      
      This required a largish rewrite of the tests. Each test needs to utilize
      the subclass so that it can properly test the drivers.
      `ActionDispatch::SystemTestCase` shouldn't be called directly anymore.
      7c9af60e
    • E
      Refactor system test driver/browser · 4dbebe48
      eileencodes 提交于
      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.
      4dbebe48
  4. 04 3月, 2017 1 次提交
    • Y
      Do not take screenshot if driver does not support screenshot · 2ee4058c
      yuuji.yaginuma 提交于
      `Capybara::RackTest::Driver` does not support taking screenshots. If call
      `#save_screenshot` on `Capybara::RackTest::Driver` will raise the error.
      
      ```ruby
      Error:
      UsersTest#test_visiting_the_index:
      Capybara::NotSupportedByDriverError: Capybara::Driver::Base#save_screenshot
      ```
      
      To prevent errors, if driver does not support screenshot, do not call it.
      2ee4058c
  5. 25 2月, 2017 1 次提交
  6. 23 2月, 2017 1 次提交
  7. 21 2月, 2017 3 次提交
    • E
      Fix default host in setup, move teardown to helper file · 161cf89e
      eileencodes 提交于
      * Override integration test default host
      
      Integration tests automatically set the default host to
      'http://example.com'. This works fine for integration tests because they
      are not real browser sessions, but doesn't work fine for system tests
      because they are real browser sessions.
      
      We can override this by setting the `host!` in `before_setup. The
      `Capybara.always_include_port` will allow the test to look at
      `127.0.0.1:port capybara picks` and properly redirect the test.
      
      Any application can override this by setting the `host!` in
      their system test helper. Generally though, applications are going to be
      using localhost.
      
      In this commit I also moved the setup and teardown into their own module
      for tidiness.
      
      * Move teardown settings into system test case
      
      These configuration options can be put into the system test case file
      instead of the generated system tests helper file. This is an
      implementation detail and therefore shouldn't be generated with the
      template.
      161cf89e
    • E
      Fix screenshot helper to provide correct file name · 983275eb
      eileencodes 提交于
      We only want the file name to include the word `failures` if it failed,
      not any time the user wants to take a screenshot during a test run.
      983275eb
    • E
      Move and rename system tests · 1a0ca84a
      eileencodes 提交于
      * Move system tests back into Action Pack
      * Rename `ActionSystemTest` to `ActionDispatch::SystemTestCase`
      * Remove private base module and only make file for public
      `SystemTestCase` class, name private module `SystemTesting`
      * Rename `ActionSystemTestCase` to `ApplicationSystemTestCase`
      * Update corresponding documentation and guides
      * Delete old `ActionSystemTest` files
      1a0ca84a