Configures tests to minimize flackyness
Reference: https://bibwild.wordpress.com/2016/02/18/struggling-towards-reliable-capybara-javascript-testing/ The only thing I did not do was removing the random order in the tests.
This commit is contained in:
@@ -10,7 +10,12 @@ Rails.application.configure do
|
|||||||
# Do not eager load code on boot. This avoids loading your whole application
|
# Do not eager load code on boot. This avoids loading your whole application
|
||||||
# just for the purpose of running a single test. If you are using a tool that
|
# just for the purpose of running a single test. If you are using a tool that
|
||||||
# preloads Rails for running tests, you may have to set it to true.
|
# preloads Rails for running tests, you may have to set it to true.
|
||||||
config.eager_load = false
|
config.eager_load = true
|
||||||
|
|
||||||
|
# Setting allow_corrency to false tells rails to force every request to
|
||||||
|
# "wait in line", serving one after the other
|
||||||
|
# Setting eager_load to true also sets allow_concurrency to true.
|
||||||
|
config.allow_concurrency = false
|
||||||
|
|
||||||
# Configure static file server for tests with Cache-Control for performance.
|
# Configure static file server for tests with Cache-Control for performance.
|
||||||
config.serve_static_files = true
|
config.serve_static_files = true
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ ActiveRecord::Migration.maintain_test_schema!
|
|||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.infer_spec_type_from_file_location!
|
config.infer_spec_type_from_file_location!
|
||||||
|
config.after :each do
|
||||||
|
Warden.test_reset!
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Capybara.javascript_driver = :poltergeist
|
Capybara.javascript_driver = :poltergeist
|
||||||
|
|||||||
@@ -18,14 +18,46 @@ RSpec.configure do |config|
|
|||||||
DatabaseCleaner.clean_with :truncation
|
DatabaseCleaner.clean_with :truncation
|
||||||
end
|
end
|
||||||
|
|
||||||
|
config.before(:suite) do
|
||||||
|
if config.use_transactional_fixtures?
|
||||||
|
raise(<<-MSG)
|
||||||
|
Delete line `config.use_transactional_fixtures = true` from rails_helper.rb
|
||||||
|
(or set it to false) to prevent uncommitted transactions being used in
|
||||||
|
JavaScript-dependent specs.
|
||||||
|
|
||||||
|
During testing, the app-under-test that the browser driver connects to
|
||||||
|
uses a different database connection to the database connection used by
|
||||||
|
the spec. The app's database connection would not be able to access
|
||||||
|
uncommitted transaction data setup over the spec's database connection.
|
||||||
|
MSG
|
||||||
|
end
|
||||||
|
DatabaseCleaner.clean_with(:truncation)
|
||||||
|
end
|
||||||
|
|
||||||
config.before(:each) do |example|
|
config.before(:each) do |example|
|
||||||
DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
|
DatabaseCleaner.strategy = :transaction
|
||||||
DatabaseCleaner.start
|
|
||||||
I18n.locale = :en
|
I18n.locale = :en
|
||||||
load "#{Rails.root}/db/seeds.rb"
|
load "#{Rails.root}/db/seeds.rb"
|
||||||
end
|
end
|
||||||
|
|
||||||
config.after(:each) do
|
config.before(:each, type: :feature) do
|
||||||
|
# :rack_test driver's Rack app under test shares database connection
|
||||||
|
# with the specs, so continue to use transaction strategy for speed.
|
||||||
|
driver_shares_db_connection_with_specs = Capybara.current_driver == :rack_test
|
||||||
|
|
||||||
|
if !driver_shares_db_connection_with_specs
|
||||||
|
# Driver is probably for an external browser with an app
|
||||||
|
# under test that does *not* share a database connection with the
|
||||||
|
# specs, so use truncation strategy.
|
||||||
|
DatabaseCleaner.strategy = :truncation
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
config.before(:each) do
|
||||||
|
DatabaseCleaner.start
|
||||||
|
end
|
||||||
|
|
||||||
|
config.append_after(:each) do
|
||||||
DatabaseCleaner.clean
|
DatabaseCleaner.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user