Search code examples
ruby-on-railsruby-on-rails-3rspecspork

Spork is not speeding up my tests


I'm using RSpec for my Rails 3 tests and trying to use Spork.

I followed several tutorials and Spork seems to be running with no errors, but my tests still take the same amount of time to run (43 seconds) with Spork on and off.

How can I figure out what's going on?

Gemfile

gem 'spork', '>=0.9.0.rc9'

spec_helper.rb

require 'rubygems'
require 'spork'
require 'factory_girl'
require 'cover_me'

Spork.prefork do
  # Loading more in this block will cause your tests to run faster. However,
  # if you change any configuration or code from libraries loaded here, you'll
  # need to restart spork for it take effect.
  # This file is copied to spec/ when you run 'rails generate rspec:install'
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'

  # Force find of factory girl definitions. Tests started failing without this, and the factories could not be found
  Factory.find_definitions

  # Requires supporting ruby files with custom matchers and macros, etc,
  # in spec/support/ and its subdirectories.
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|
    # == Mock Framework
    #
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
    #
    # config.mock_with :mocha
    # config.mock_with :flexmock
    # config.mock_with :rr
    config.mock_with :rspec

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
    config.fixture_path = "#{::Rails.root}/spec/fixtures"

    # If you're not using ActiveRecord, or you'd prefer not to run each of your
    # examples within a transaction, remove the following line or assign false
    # instead of true.
    config.use_transactional_fixtures = true

    # Needed for Spork
    ActiveSupport::Dependencies.clear
  end
end

Spork.each_run do
  # This code will be run each time you run your specs.

end

When I run →spork to start the server everything looks fine:

→ spork Using RSpec Preloading Rails environment Loading Spork.prefork block... Spork is ready and listening on 8989!

I also have --drb in the .rspec file


Solution

  • It depends on how you measure execution time. If you are including the time it takes to spin up rails that should be faster, but actual test run time wont change.

    Spork caches the rails environment which speeds up spin up time but it doesn't speed up actual execution time.