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 # 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

View File

@@ -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

View File

@@ -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