Reusing Spec's

Hello,

Is there any way to reuse spec definitions, perhaps through some kind of
inheritance?

For example, in rails, every time it generates a Spec I must tell it to

  1. Include Devise::TestHelpers
  2. Log the user in, so there is a default user setup before each test is
    run. This is common for 95% of my controllers and doesn’t seem very DRY
    to
    me.
  3. Other types of things that end up requiring setup

In Java (my main language), I could put all of this in a base class and
just
extend it… but I don’t know how to do that with a describe block.

Is there a mechanism for dealing with this? Do I need to include a
module
that includes the devise helpers and whatever else I need it to do?

Thanks

Ken

On May 18, 2011, at 11:23 AM, Ken Egervari wrote:

In Java (my main language), I could put all of this in a base class and just
extend it… but I don’t know how to do that with a describe block.

Is there a mechanism for dealing with this? Do I need to include a module that
includes the devise helpers and whatever else I need it to do?

Take a look at shared context:
http://relishapp.com/rspec/rspec-core/dir/example-groups/shared-context

On Wed, May 18, 2011 at 10:23 AM, Ken Egervari
[email protected]wrote:

Hello,

Is there any way to reuse spec definitions, perhaps through some kind of
inheritance?

For example, in rails, every time it generates a Spec I must tell it to

  1. Include Devise::TestHelpers

you can do:

RSpec.configuration do |config|
config.include Devise::TestHelpers, :type => :controller
end

This will include it in all of your controllers.

Hi Justin

I tried that config.include call in my test.rb file, but Rails
complains::

/usr/local/lib/ruby/gems/1.9.1/gems/railties-3.0.7/lib/rails/railtie/configuration.rb:77:in
method_missing': undefined methodinclude’ for
#Rails::Application::Configuration:0x000000027b3098 (NoMethodError)
from
/home/egervari/Projects/training/config/environments/test.rb:36:in
`block in <top (required)>’

I am using Rails 3.0.7

I hope we can get this to work because that would solve part of this
problem. Then I can look at shared state to log the user in and other
things.

Ken

On Wed, May 18, 2011 at 8:33 PM, Ken Egervari
[email protected]wrote:

I am using Rails 3.0.7

that includes the devise helpers and whatever else I need it to do?

[email protected]
http://rubyforge.org/mailman/listinfo/rspec-users

Woops! It needs to go in your spec/spec_helper.rb file, not your test.rb
environment file.

Also, I would upgrade to Ruby 1.9.2 - 1.9.1 has some bugs that will give
you
problems.

Thanks strange… I have installed Ruby 1.9.2 and that’s what comes up
in
the command line:

egervari@egervari:~/Projects/training$ ruby --version
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]

However, you’re right… RubyMine seems to be using 1.9.1. Thanks for
the
catch! I think it’s because Ubuntu has installed 1.9.1 as a package and
Idea
detected this one over the the other one.

Ken

Oh, never mind. I tried this in spec_helper.rb and it works :wink:

Ken