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:
kikito
2016-02-24 11:37:07 +01:00
parent 171c4dde13
commit eda47effc4
3 changed files with 44 additions and 4 deletions

View File

@@ -10,7 +10,12 @@ Rails.application.configure do
# 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
# 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.
config.serve_static_files = true

View File

@@ -19,6 +19,9 @@ ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.infer_spec_type_from_file_location!
config.after :each do
Warden.test_reset!
end
end
Capybara.javascript_driver = :poltergeist

View File

@@ -18,14 +18,46 @@ RSpec.configure do |config|
DatabaseCleaner.clean_with :truncation
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|
DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
DatabaseCleaner.start
DatabaseCleaner.strategy = :transaction
I18n.locale = :en
load "#{Rails.root}/db/seeds.rb"
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
end