public
Description: A DRb server for testing frameworks (RSpec / Cucumber currently) that forks before each run to ensure a clean testing state.
Homepage: spork.rubyforge.org
Clone URL: git://github.com/timcharper/spork.git
spork /
name age message
file .gitignore Wed Jun 03 23:08:03 -0700 2009 ignore tmp directory [timcharper]
file History.txt Loading commit data...
file MIT-LICENSE Sat May 30 00:22:53 -0700 2009 added license information [timcharper]
file README.rdoc Sat Jun 06 00:09:27 -0700 2009 updated documentation [timcharper]
file Rakefile
file VERSION.yml
directory assets/ Mon Jun 08 11:38:44 -0700 2009 cleaned up features to make them more suitable ... [timcharper]
directory bin/ Fri May 29 15:21:42 -0700 2009 don't output SystemExit exceptions [timcharper]
directory features/
directory lib/
directory spec/ Mon Jun 08 09:09:18 -0700 2009 regression fix, and 0.5.3 release [timcharper]
file spork.gemspec
README.rdoc

Spork

SYNOPSIS:

Spork is Tim Harper’s implementation of a Drb spec server (similar to the script/spec_server provided by rspec-rails), except rather than using the Rails constant unloading to reload your files, it forks a copy of the server each time you run your specs. The result? Spork runs more solid: it doesn’t get corrupted over time, and it properly handles modules and any voo-doo meta programming you may have put in your app.

Because Spork uses Kernel.fork, it only works on POSIX systems. This means Windows users are not invited to this party. Sorry :(

INSTALL:

  [sudo] gem install timcharper-spork --source http://gems.github.com/

alternatively:

  git clone git://github.com/timcharper/spork.git
  cd spork
  gem build spork.gemspec
  sudo gem install spork.gemspec

Usage

From a terminal, change to your project directory.

Then, bootstrap your spec/spec_helper.rb file.

  spork --bootstrap

Next, edit spec/spec_helper.rb and follow the instructions that were put at the top.

Finally, run spork. A spec DRb server will be running!

  spork

Diagnostic mode

Initially, you may find that a few files don’t reload automatically. This is because they are being loaded during Spork startup. To identify which project files are being pre-loaded, and why, run:

  spork --diagnose
  (or spork -d, for short)

It will output a lot of stuff. At the top you’ll find a summary of all project files loaded. Down below, the stack trace for each file (how it got loaded). Spork hooks into Rails and does some magic (TM) to prevent ApplicationController observers, etc from pre-loading. Similar hooks for other ruby frameworks may come as support demands.

Running specs over Spork

RSpec

To get the TextMate RSpec bundle to use spork, go to config->advanced->shell variables, and add:

  TM_RSPEC_OPTS=--drb.

To run from the command line, use:

  spec --drb spec/lib/my_spec.rb

Or, you could add the following flag to your +spec.opts+ file.

  --drb

Cucumber

Cucumber —drb support for spork is not official yet (but it works). It’s the hottest sauce boiling on the world wide web right now. If you can’t wait to try it, head on over to Cucumber core-team member Ben Mabey’s drb branch and build your own cucumber gem:

  http://github.com/bmabey/cucumber/tree/drb_server

Use this as a guideline when "Sporking" your features/support/env.rb file

  http://gist.github.com/123370

Some potential issues and ways to overcome them:

Database connections don’t work inside of Spork

If you’re using ActiveRecord and Rails, Spork will automatically reconnect to the database. However, if you’re not using ActiveRecord, or if you’re doing some tricky stuff with connections, you’ll have to make sure your connections get re-established on each run. In your spec/spec_helper.rb file:

  Spork.each_run do
    # Do your connection re-establishing here
  end

Couldn’t find formatter class Spec::Runner::Formatter::TextMateFormatter

  Make sure the --require option is specified *before* --format

On one of our projects, many of us using TextMate with spork, only one developer got this error message while the rest of us ran just fine. I don’t know exactly why it happened, but requiring the textmate formatter in the prefork block made it go away, like this:

  Spork.prefork do
    gem "rspec", "= 1.2.6"
    require 'spec'
    ...
    require 'spec/runner/formatter/text_mate_formatter'
    ...
  end

Kudos to

  • Ben Mabey - help with documentation, testing, suggestions, patches, and bringing Cucumber support.
  • David Chelimsky - for the fine RSpec testing framework, and the original rspec-rails spec_server implementation, which Spork has built upon.
  • Lead Media Partners - just for being an awesome place to work.

Spork © 2009 Tim Harper, released under the MIT license