The standard Rails development log contains a lot of noise that is rarely meaningful for debugging. The Quiet Assets gem is a mandatory part of my Rails development process as it removes the logging noise of the asset pipeline.
Also, if WEBrick is used as a development server, the following entry is logged for each asset pipeline log entry (whether silenced or not by Quiet Assets):
WARN Could not determine content-length of response body.
Set content-length of the response or set Response#chunked = true
While some have suggested monkey-patching WEBrick
or installing Thin
as an alternate server (which doesn’t work under JRuby), the simplest way to remove those statements is to add WEBrick specifically in your
gem 'webrick', '~> 1.3.1', group: :development
RSpec by default issues a database transactional rollback that is executed after the completion of a block. When using Capybara with the
:js option (to enable testing with Selenium or Webkit), the transactional rollback offered by RSpec is unusable as the browser is loaded via a separate thread and has a separate database connection. Thus any uncommitted data cannot be read by the browser.
Most people suggest employing DatabaseCleaner using a truncation strategy to overcome this deficiency. The performance of cleaning via truncation vs transaction depends on the size of data – with smaller fixtures, transactions are preferable.
Instead of using one or the other, we can mix strategies to have the best of both worlds:
config.use_transactional_fixtures = false # Using DatabaseCleaner instead
DatabaseCleaner.strategy = :transaction # Default strategy
DatabaseCleaner.clean_with(:truncation) # Initially clean with truncation
config.before(:each, type: :request) do
# Swap to truncation as Selenium runs in separate thread with a different
# database connection
DatabaseCleaner.strategy = :truncation
config.after(:each, type: :request) do
# Reset so non-request specs can use transaction
DatabaseCleaner.strategy = :transaction
On my current test suite of around 461 tests with 73 request specs, this dropped the run time by just over a minute.
Most Ruby mocking frameworks have the ability to mock a new object created via a constructor. However, when an object is created via ActiveRecord’s
find_by_* methods, the
.new method isn’t invoked. Instead, the
.instantiate method is called.
For example, to specify
:instantiate as the object creation method using FlexMock: