Instantly share code, notes, and snippets.

Embed
What would you like to do?
Sensible RSpec config for clean, and slightly faster, specs.
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
require 'webmock/rspec'
require 'factory_girl'
require 'factory_girl_rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.infer_base_class_for_anonymous_controllers = false
config.include JsonSpec::Helpers
config.include LoginHelper, type: :request
config.include ActivitySpecHelper, type: :request
config.include RoomSpecHelper, type: :request
config.include AutocompleteSpecHelper, type: :request
config.before :suite do
DatabaseCleaner.clean_with :truncation
end
config.before type: :model do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.start
end
# Request specs cannot use a transaction because Capybara runs in a
# separate thread with a different database connection.
config.before type: :request do
DatabaseCleaner.strategy = :truncation
DatabaseCleaner.start
end
# Reset so other non-request specs don't have to deal with slow truncation.
config.after type: :request do
DatabaseCleaner.strategy = :transaction
end
config.before do
WebMock.disable_net_connect!(:allow_localhost => true)
ActionMailer::Base.deliveries.clear
end
config.after do
Timecop.return
DatabaseCleaner.clean
end
end
Capybara.javascript_driver = :webkit
Capybara.default_wait_time = 5
Capybara.ignore_hidden_elements = false
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'
require 'capybara/rspec'
require 'webmock/rspec'
require 'factory_girl'
require 'factory_girl_rails'
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
RSpec.configure do |config|
config.use_transactional_fixtures = false
config.infer_base_class_for_anonymous_controllers = false
config.include JsonSpec::Helpers
config.include LoginHelper, type: :request
config.include ActivitySpecHelper, type: :request
config.include RoomSpecHelper, type: :request
config.include AutocompleteSpecHelper, type: :request
config.before :suite do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
# Request specs cannot use a transaction because Capybara runs in a
# separate thread with a different database connection.
config.before type: :request do
DatabaseCleaner.strategy = :truncation
end
# Reset so other non-request specs don't have to deal with slow truncation.
config.after type: :request do
DatabaseCleaner.strategy = :transaction
end
config.before do
DatabaseCleaner.start
WebMock.disable_net_connect!(:allow_localhost => true)
ActionMailer::Base.deliveries.clear
end
config.after do
DatabaseCleaner.clean
end
Capybara.javascript_driver = :webkit
Capybara.ignore_hidden_elements = false
end
config.use_transactional_fixtures = false
config.before :suite do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.before type: :request do
DatabaseCleaner.strategy = :truncation
end
config.after type: :request do
DatabaseCleaner.strategy = :transaction
end
config.before do
DatabaseCleaner.start
WebMock.disable_net_connect!(:allow_localhost => true)
ActionMailer::Base.deliveries.clear
end
config.after do
DatabaseCleaner.clean
end
@stevenharman

This comment has been minimized.

Show comment
Hide comment
@stevenharman

stevenharman Nov 1, 2012

I updated this Gist to also reset the strategy after each request spec.

# Reset so other non-request specs don't have to deal with slow truncation.
config.after type: :request  do
  DatabaseCleaner.strategy = :transaction
end
Owner

stevenharman commented Nov 1, 2012

I updated this Gist to also reset the strategy after each request spec.

# Reset so other non-request specs don't have to deal with slow truncation.
config.after type: :request  do
  DatabaseCleaner.strategy = :transaction
end
@a14m

This comment has been minimized.

Show comment
Hide comment
@a14m

a14m Nov 13, 2013

can I add the desired request headers here for example i want to add request.env['HTTP_ACCEPT'] = 'application/vnd.site+json; version=1'

a14m commented Nov 13, 2013

can I add the desired request headers here for example i want to add request.env['HTTP_ACCEPT'] = 'application/vnd.site+json; version=1'

@mockdeep

This comment has been minimized.

Show comment
Hide comment
@mockdeep

mockdeep Mar 31, 2014

Just came across this today and it helped me figure out my own setup. In case it helps you can check it out here: https://gist.github.com/mockdeep/9904695

The one major catch with these is that order matters, and after hooks run in reverse order, so I use prepend_before and append_after to avoid confusion.

mockdeep commented Mar 31, 2014

Just came across this today and it helped me figure out my own setup. In case it helps you can check it out here: https://gist.github.com/mockdeep/9904695

The one major catch with these is that order matters, and after hooks run in reverse order, so I use prepend_before and append_after to avoid confusion.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment