/guard-spork

Guard::Spork automatically manage Spork DRb servers

Primary LanguageRubyMIT LicenseMIT

Guard::Spork Build Status

Guard::Spork allows to automatically & intelligently start/reload your RSpec/Cucumber/Test::Unit Spork server(s).

  • Compatible with Spork 0.8.4 & 0.9.0.rcX.
  • Tested against Ruby 1.8.7, 1.9.2, REE and the latest versions Rubinius.

Install

Please be sure to have Guard installed before continue.

Install the gem:

$ gem install guard-spork

Add it to your Gemfile (inside development group):

group :development do
  gem 'guard-spork'
end

Add guard definition to your Guardfile with:

$ guard init spork

Usage

Please read the Guard usage documentation.

Guardfile

Please read Guard doc for more info about the Guardfile DSL.

IMPORTANT: place Spork guard before RSpec/Cucumber/Test::Unit guards!

Rails app

guard 'spork' do
  watch('config/application.rb')
  watch('config/environment.rb')
  watch(%r{^config/environments/.*\.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

Running specs over Spork

Pass the :cli => "--drb" option to Guard::RSpec and/or Guard::Cucumber to run them over the Spork DRb server:

guard 'rspec', :cli => "--drb" do
  # ...
end

guard 'cucumber', :cli => "--drb" do
  # ...
end

For MiniTest Guard you should pass the :drb => true option:

guard 'minitest', :drb => true do
  # ...
end

Options

Guard::Spork automatically detect RSpec/Cucumber/Test::Unit/Bundler presence but you can disable any of them with the corresponding options:

guard 'spork', :rspec => false, :cucumber => false, :test_unit => false, :bundler => false do
  # ...
end

You can provide additional environment variables for RSpec, Cucumber, and Test::Unit with the :rspec_env, :cucumber_env, and :test_unit_env options:

guard 'spork', :cucumber_env => { 'RAILS_ENV' => 'cucumber' }, :rspec_env => { 'RAILS_ENV' => 'test' }, :test_unit_env => { 'RAILS_ENV' => 'test' } do
  # ...
end

Available options:

:wait => 60                                # Seconds to wait for the server to start, default: 30
:cucumber => false
:rspec => false
:test_unit => false
:bundler => false                          # Don't use "bundle exec"
:test_unit_port => 1233                    # Default: 8988
:rspec_port => 1234                        # Default: 8989
:cucumber_port => 4321                     # Default: 8990
:test_unit_env => { 'RAILS_ENV' => 'baz' } # Default: nil
:rspec_env => { 'RAILS_ENV' => 'foo' }     # Default: nil
:cucumber_env => { 'RAILS_ENV' => 'bar' }  # Default: nil
:aggressive_kill => false                  # Default: true, will search Spork pids from `ps aux` and kill them all on start.
:notify_on_start => true                   # Default: false, will notify as soon as starting begins.

Common troubleshooting

If you can start Spork manually but get the following error message when using Guard::Spork:

Starting Spork for RSpec ERROR: Could not start Spork for RSpec/Cucumber. Make sure you can use it manually first.

Try to increase the value of the :wait => 60 option before any further investigation. It's possible that this error is the result of an unnecessary /test directory in the root of your application. Removing the /test directory entirely may resolve this error.

Development

Pull requests are very welcome! Please try to follow these simple "rules", though:

  • Please create a topic branch for every separate change you make.
  • Make sure your patches are well tested.
  • Update the README (if applicable).
  • Please do not change the version number.

For questions please join us on our Google group or on #guard (irc.freenode.net).

Author

Thibaud Guillaume-Gentil