views:

272

answers:

2

I need to have a setup and teardown method for some Rails tests that is class or system wide, yet I have only found a way to define a regular setup/teardown that works on a per test level.

For example:

class ActiveSupport::TestCase
  setup do
    puts "Setting up"
  end

  teardown do
    puts "tearing down"
  end
end

will execute the outputs for each test case, but I would like something like:

class ActiveSupport::TestCase
  setup_fixture do
    puts "Setting up"
  end

  teardown_fixture do
    puts "tearing down"
  end
end

which would execute the setup_fixture before all test methods, and then execute teardown_fixture after all test methods.

Is there any such mechanism? If not, is there an easy way to monkey patch this mechanism in?

A: 

I think rails provides such a functionality for fixtures. You can use fixtures by saying

  fixtures :users

in your test files

and besides you can also use

def setup
  #....
end

in your test files as well,

Rishav Rastogi
+2  A: 

There are several popular test frameworks that build on Test::Unit and provide this behavior:

RSpec

describe "A Widget" do
  before(:all) do
    # stuff that gets run once at startup
  end
  before(:each) do
    # stuff that gets run before each test
  end
  after(:each) do
    # stuff that gets run after each test
  end
  after(:all) do
    # stuff that gets run once at teardown
  end
end

Test/Spec

context "A Widget" do
  # same syntax as RSpec for before(:all), before(:each), &c.
end
James A. Rosen