-
-
Notifications
You must be signed in to change notification settings - Fork 630
/
rails_helper.rb
143 lines (116 loc) · 5.67 KB
/
rails_helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# frozen_string_literal: true
ENV["RAILS_ENV"] ||= "test"
SERVER_BUNDLE_PATH = File.expand_path("../../public/webpack/#{ENV.fetch('RAILS_ENV', nil)}/server-bundle.js", __FILE__)
require_relative "simplecov_helper"
require_relative "spec_helper"
require_relative("../config/environment")
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require "rspec/rails"
require "capybara/rails"
require "capybara-screenshot/rspec"
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
# Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
# Checks for pending migrations before tests are run.
# If you are not using ActiveRecord, you can remove this line.
# ActiveRecord::Migration.maintain_test_schema!
# Requires supporting files with custom matchers and macros, etc,
# in ./support/ and its subdirectories.
Dir[Rails.root.join("spec", "support", "**", "*.rb")].each { |f| require f }
RSpec.configure do |config|
# Ensure that if we are running js tests, we are using latest webpack assets
# This is false since we're using shakacode/shakapacker shakapacker.yml test.compile == true
# ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config, :requires_webpack_assets)
# config.define_derived_metadata(file_path: %r{spec/(system|requests|helpers)}) do |metadata|
# metadata[:requires_webpack_assets] = true
# end
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
# For React on Rails Pro, using loadable-stats.json
config.fixture_path = "#{Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
# Tests do not hit the DB
# config.use_transactional_fixtures = true
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, :type => :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
# Capybara config
config.include Capybara::DSL
# More information about headless=new option at https://www.selenium.dev/blog/2023/headless-is-going-away/
Capybara.register_driver :selenium_chrome_headless do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument("--headless=new")
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end
#
# selenium_firefox webdriver only works for Travis-CI builds.
default_driver = :selenium_chrome_headless
supported_drivers = %i[selenium_chrome_headless selenium_chrome selenium selenium_headless]
driver = ENV["DRIVER"].try(:to_sym).presence || default_driver
Capybara.javascript_driver = driver
Capybara.default_driver = driver
raise "Unsupported driver: #{driver} (supported = #{supported_drivers})" unless supported_drivers.include?(driver)
Capybara.register_server(Capybara.javascript_driver) do |app, port|
require "rack/handler/puma"
Rack::Handler::Puma.run(app, Port: port)
end
config.before(:each, :js, type: :system) do
driven_by driver
end
config.before(:each, :rack_test, type: :system) do
driven_by :rack_test
end
# Capybara.default_max_wait_time = 15
puts "=" * 80
puts "Capybara using driver: #{Capybara.javascript_driver}"
puts "=" * 80
Capybara.save_path = Rails.root.join("tmp", "capybara")
Capybara::Screenshot.prune_strategy = { keep: 10 }
# https://github.com/mattheworiordan/capybara-screenshot/issues/243#issuecomment-620423225
config.retry_callback = proc do |ex|
Capybara.reset_sessions! if ex.metadata[:js]
end
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, :type => :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
# This will insert a <base> tag with the asset host into the pages created by
# save_and_open_page, meaning that relative links will be loaded from the
# development server if it is running.
Capybara.asset_host = "http://localhost:3000"
end