summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-04-27 07:43:45 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-04-27 07:43:45 +0000
commitf3ffd7d0b1d357b1dff6c00f02e3fbcaead7e2b6 (patch)
tree3d47fadc237a9a6338d3f3142151aedb152cdea6
parentb4317b16567a34d8368b78e62dc8dc75727f72d0 (diff)
parent652c15b585bac393b5c403a03355040eef51789c (diff)
downloadgitlab-ce-f3ffd7d0b1d357b1dff6c00f02e3fbcaead7e2b6.tar.gz
Merge branch 'rs-capybara-screenshot' into 'master'
Add capybara-screenshot gem This is a handy little gem that automatically saves the page and a screenshot when a Capybara test fails to `tmp/capybara/` so you can easily see why it might have failed without adding your own `save_and_open_page` directive in the code. Also reduces the timeout for Capybara tests when not in a CI environment. See merge request !578
-rw-r--r--Gemfile5
-rw-r--r--Gemfile.lock5
-rw-r--r--features/support/capybara.rb24
-rw-r--r--features/support/db_cleaner.rb11
-rw-r--r--features/support/env.rb30
-rw-r--r--spec/spec_helper.rb8
-rw-r--r--spec/support/capybara.rb21
7 files changed, 67 insertions, 37 deletions
diff --git a/Gemfile b/Gemfile
index 460a0f93a96..3e1fa01675a 100644
--- a/Gemfile
+++ b/Gemfile
@@ -223,14 +223,13 @@ end
group :development, :test do
gem 'coveralls', require: false
gem 'rubocop', '0.28.0', require: false
- # gem 'rails-dev-tweaks'
gem 'spinach-rails'
gem "rspec-rails", '2.99'
- gem "capybara", '~> 2.2.1'
+ gem 'capybara', '~> 2.2.1'
+ gem 'capybara-screenshot', '~> 1.0.0'
gem "pry-rails"
gem "awesome_print"
gem "database_cleaner"
- gem "launchy"
gem 'factory_girl_rails'
# Prevent occasions where minitest is not bundled in packaged versions of ruby (see #3826)
diff --git a/Gemfile.lock b/Gemfile.lock
index f0f8601a760..2260beb0a5e 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -85,6 +85,9 @@ GEM
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
+ capybara-screenshot (1.0.9)
+ capybara (>= 1.0, < 3)
+ launchy
carrierwave (0.9.0)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
@@ -677,6 +680,7 @@ DEPENDENCIES
byebug
cal-heatmap-rails (~> 0.0.1)
capybara (~> 2.2.1)
+ capybara-screenshot (~> 1.0.0)
carrierwave
charlock_holmes
coffee-rails
@@ -726,7 +730,6 @@ DEPENDENCIES
jquery-turbolinks
jquery-ui-rails
kaminari (~> 0.15.1)
- launchy
letter_opener
minitest (~> 5.3.0)
mousetrap-rails
diff --git a/features/support/capybara.rb b/features/support/capybara.rb
new file mode 100644
index 00000000000..31dbf0feb2f
--- /dev/null
+++ b/features/support/capybara.rb
@@ -0,0 +1,24 @@
+require 'spinach/capybara'
+require 'capybara/poltergeist'
+
+# Give CI some extra time
+timeout = (ENV['CI'] || ENV['CI_SERVER']) ? 90 : 10
+
+Capybara.javascript_driver = :poltergeist
+Capybara.register_driver :poltergeist do |app|
+ Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: timeout)
+end
+
+Spinach.hooks.on_tag("javascript") do
+ Capybara.current_driver = Capybara.javascript_driver
+end
+
+Capybara.default_wait_time = timeout
+Capybara.ignore_hidden_elements = false
+
+unless ENV['CI'] || ENV['CI_SERVER']
+ require 'capybara-screenshot/spinach'
+
+ # Keep only the screenshots generated from the last failing test suite
+ Capybara::Screenshot.prune_strategy = :keep_last_run
+end
diff --git a/features/support/db_cleaner.rb b/features/support/db_cleaner.rb
new file mode 100644
index 00000000000..1ab308cfa55
--- /dev/null
+++ b/features/support/db_cleaner.rb
@@ -0,0 +1,11 @@
+require 'database_cleaner'
+
+DatabaseCleaner.strategy = :truncation
+
+Spinach.hooks.before_scenario do
+ DatabaseCleaner.start
+end
+
+Spinach.hooks.after_scenario do
+ DatabaseCleaner.clean
+end
diff --git a/features/support/env.rb b/features/support/env.rb
index be17065ccfd..f34302721ed 100644
--- a/features/support/env.rb
+++ b/features/support/env.rb
@@ -11,40 +11,18 @@ ENV['RAILS_ENV'] = 'test'
require './config/environment'
require 'rspec'
require 'rspec/expectations'
-require 'database_cleaner'
-require 'spinach/capybara'
require 'sidekiq/testing/inline'
+require_relative 'capybara'
+require_relative 'db_cleaner'
+
%w(select2_helper test_env repo_helpers).each do |f|
require Rails.root.join('spec', 'support', f)
end
-Dir["#{Rails.root}/features/steps/shared/*.rb"].each {|file| require file}
+Dir["#{Rails.root}/features/steps/shared/*.rb"].each { |file| require file }
WebMock.allow_net_connect!
-#
-# JS driver
-#
-require 'capybara/poltergeist'
-Capybara.javascript_driver = :poltergeist
-Capybara.register_driver :poltergeist do |app|
- Capybara::Poltergeist::Driver.new(app, js_errors: false, timeout: 90)
-end
-Spinach.hooks.on_tag("javascript") do
- ::Capybara.current_driver = ::Capybara.javascript_driver
-end
-Capybara.default_wait_time = 60
-Capybara.ignore_hidden_elements = false
-
-DatabaseCleaner.strategy = :truncation
-
-Spinach.hooks.before_scenario do
- DatabaseCleaner.start
-end
-
-Spinach.hooks.after_scenario do
- DatabaseCleaner.clean
-end
Spinach.hooks.before_run do
include RSpec::Mocks::ExampleMethods
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 53ccaa4fd67..8fe51cf4add 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -10,19 +10,13 @@ end
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
-require 'capybara/rails'
-require 'capybara/rspec'
require 'webmock/rspec'
require 'email_spec'
require 'sidekiq/testing/inline'
-require 'capybara/poltergeist'
-
-Capybara.javascript_driver = :poltergeist
-Capybara.default_wait_time = 10
# Requires supporting ruby files with custom matchers and macros, etc,
# in spec/support/ and its subdirectories.
-Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
+Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
WebMock.disable_net_connect!(allow_localhost: true)
diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb
new file mode 100644
index 00000000000..fed1ab6ee33
--- /dev/null
+++ b/spec/support/capybara.rb
@@ -0,0 +1,21 @@
+require 'capybara/rails'
+require 'capybara/rspec'
+require 'capybara/poltergeist'
+
+# Give CI some extra time
+timeout = (ENV['CI'] || ENV['CI_SERVER']) ? 90 : 10
+
+Capybara.javascript_driver = :poltergeist
+Capybara.register_driver :poltergeist do |app|
+ Capybara::Poltergeist::Driver.new(app, js_errors: true, timeout: timeout)
+end
+
+Capybara.default_wait_time = timeout
+Capybara.ignore_hidden_elements = true
+
+unless ENV['CI'] || ENV['CI_SERVER']
+ require 'capybara-screenshot/rspec'
+
+ # Keep only the screenshots generated from the last failing test suite
+ Capybara::Screenshot.prune_strategy = :keep_last_run
+end