Merge pull request #929 from consul/flacky-tests

Flacky tests
This commit is contained in:
Juanjo Bazán
2016-02-24 12:08:40 +01:00
4 changed files with 46 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

@@ -300,6 +300,8 @@ feature 'Commenting debates' do
# The button's text should now be "..."
# This should be checked before the Ajax request is finished
expect(page).to_not have_button 'Publish comment'
expect(page).to have_content('Testing submit button!')
end
feature "Moderators" do

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