1

Im setting up a new project with:

  • ruby 1.9.3
  • rails 3.2.9

And I'm trying to configure rspec with guard and spork following Michael Hartl tutorial. I've already did this for other projects and it wen't well but this time I'm getting a strange behavior from guard.

On the old project, if I have guard running, add a line like this to a method 'puts "Test"' and save the file. Guard detects that the file was changed, reruns the tests for that file and the message appears on the terminal.

If I do the same thing on this new project. Guard alse detects that the file was changed, reruns the tests for that file but the message won't appear on the terminal. It appears that it's still using the old code base.

I've already diff both projects configurations and everything looks similar. Any ideas?

I'll leave the configuration file here to see if someone find something odd.

Gemfile

...
gem 'rb-fsevent', '~> 0.9.1'

group :development, :test do
  gem 'rspec'
  gem 'rspec-rails'
  gem 'guard-rspec'
  gem 'factory_girl_rails'
end

group :test do
  gem 'capybara'
  gem 'guard-spork'
  gem 'spork'
end

Guardfile

guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'test' }, :rspec_env => { 'RAILS_ENV' => 'test' } do
  watch('config/application.rb')
  watch('config/environment.rb')
  watch('config/environments/test.rb')
  watch(%r{^config/initializers/.+\.rb$})
  watch('Gemfile')
  watch('Gemfile.lock')
  watch('spec/spec_helper.rb') { :rspec }
  watch('test/test_helper.rb') { :test_unit }
  watch(%r{features/support/}) { :cucumber }
end

guard 'rspec', :version => 2, :all_after_pass => false, :cli => '--drb' do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }

  # Capybara request specs
  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/requests/#{m[1]}_spec.rb" }

  # Turnip features and steps
  watch(%r{^spec/acceptance/(.+)\.feature$})
  watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$})   { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
end

spec/spec_helper.rb

require 'rubygems'
require 'spork'

Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'rspec/autorun'

  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|
    config.include Devise::TestHelpers, :type => :controller
    config.extend ControllerMacros, :type => :controller

    config.fixture_path = "#{::Rails.root}/spec/fixtures"
    config.use_transactional_fixtures = true
    config.infer_base_class_for_anonymous_controllers = false
    config.order = "random"
  end
end

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

end
2
  • That may be a good opportunity to give Zeus a try :P Commented Nov 22, 2012 at 9:57
  • @Netzpirat Probably not for this project, but i'll give it a look Commented Nov 22, 2012 at 12:26

1 Answer 1

1

It's probably a problem with Spork not reloading your code when you make changes, take a look at this question it should solve your problems:

Spork: how to refresh validations and other code?

Sign up to request clarification or add additional context in comments.

1 Comment

I think it had something to do with factory girl. I ended up following a pre build environment that i found on your link and was able to resolve the problem.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.