2010-09-19 1 views
3

Я использую Rails3 с rspec и shoulda. У меня есть ниже SPECassigns_to не работает для Rails 3 Shoulda on Ubuntu

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 

Вот мой Gem файле

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 

и вот мой spec_helper

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

ИТАК пока все довольно близко соответствует тому, что я видел раньше, однако всякий раз, когда Я запускаю свои тесты. Я получаю такие ошибки, как ниже

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 

Не было моей первой мысли, что код был сломан, однако приложение работает исправно. Также, если я проверю, что значения назначаются с помощью назначений [: сайт], тогда тест проходит.

Кто-нибудь знает, что мне нужно изменить, чтобы эти тесты снова начали работать.

Заранее спасибо

Энди

ответ

3

Вы должны вызвать subject { controller } перед вашими it заявления. Это на самом деле путало меня так плохо, что я написал my first ever blog post about it.

+0

хороший, удивительно документации RSpec Shoulda действительно слабый, по сравнению с версией тестового блока. Его заняли ночи, чтобы понять это, так как тот же код работал на Rails 2. –

+0

Я не могу заставить его работать, даже задавая тему, мои помощники-шашки (1.0.0.beta1) с rspec 2.4.0 – Samnang

+1

Да, не работая для меня :(Попытка выяснить, почему. –

0

Если вы используете рубин 1.9.2 assign_to Искателя с версией shoulda-matchers гема ниже 1.0.0beta2 будет по-прежнему не работает, даже если вы включите subject { controller } (который, я считаю, на самом деле не требуется).

Это связано с изменением в Ruby 1.9.2. Вот bugreport for shoulda. Исправление составляет already included и выпущено в shoulda-matchers версии 1.0.0beta2.

Так просто это в вашем Gemfile:

group :development, :test do 
    gem 'shoulda-matchers' 
    ...  

и обновление до последней версии (1.0.0.beta2 атм):

bundle update shoulda-matchers 
Смежные вопросы