views:

49

answers:

1

Hi

I'm using Rails3 with rspec and shoulda. I have the below spec

describe PagesController, "on GET to show while logged off" do
  before(:each) do
    @site = Factory.create(:site)
    @site.domains << Factory.create(:domain)
    @site.save!
    @site.pages << Factory.create(:page)
    @site.menus << Factory.create(:menu, {:site=>@site, :is_visible=>true})
    @site.menus << Factory.create(:menu, {:site=>@site, :is_visible=>true})
    @site.menus << Factory.create(:menu, {:is_visible=>false, :site=>@site})

    get :show
  end

  it { should render_template(:show) }
  it { should render_template('layouts/2col') }
  it { should assign_to(:site) }
  it { should assign_to(:site).with(@site) }
  it { should assign_to(:site).with(@site) }
  it { should assign_to(:page).with(@site.pages[0])}
  it "show visible menu_items only" do 
    assert assigns[:menu_items].length == 2
  end
end

Here's my Gem File

group :development, :test do
  gem 'autotest'
  gem 'factory_girl'
  gem 'rspec', '>=2.0.0.beta.19'
  gem 'rspec-rails', '>=2.0.0.beta.17'
  gem 'shoulda'
end

and here's my spec_helper

require 'rspec/rails'
require 'shoulda'
require 'shoulda/integrations/rspec2'
require 'authlogic/test_case'
require 'factory_girl

Ok so far everything pretty close matches what I've seen before, however whenever I run my tests I get the errors like below

1) PagesController on GET to show while logged off 
     Failure/Error: it { should assign_to(:site) }
     Expected action to assign a value for @site
     # ./spec/controllers/pages_controller_spec.rb:19

No my first thought was that the code was broken, however the application runs correcty. Also if I test that the values are assigned by using the assigns[:site] then the test passes.

Has anyone any idea what I need to change in order to make these tests start working again.

Thanks In Advance

Andy

+1  A: 

You need to call subject { controller } before your it statements. This actually confused me so badly for a while that I wrote my first ever blog post about it.

rspeicher
nice one, amazingly the rspec shoulda documentation is really weak, compared to the test unit version. Its's taken me nights to figure this out, as the same code worked on Rails 2.
Andrew Stewart