2010-09-19 41 views
3

我使用帶rspec和shoulda的Rails3。我有以下規格assigns_to不適用於Rails 3在Ubuntu上Shoulda

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 

這裏是我的寶石文件

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 

我的第一個想法是代碼被破壞,但是應用程序運行正確。另外,如果我測試通過使用assigns [:site]分配值,則測試通過。

有沒有人有任何想法我需要改變,以使這些測試再次開始工作。

在此先感謝

安迪

回答

3

你需要你的語句it之前調用subject { controller }。這實際上讓我很困惑,我寫了my first ever blog post about it

+0

不錯的一個,令人驚訝的RSpec的早該文檔非常與測試版本相比較弱。它需要我晚上才能弄清楚這一點,因爲Rails 2使用相同的代碼。 – 2010-09-20 07:02:57

+0

即使指定了主題,我的shoulda-matchers是(1.0.0.beta1)rspec 2.4.0 – Samnang 2011-02-12 11:13:21

+1

是的,不是爲我工作:(試圖找出原因 – 2011-02-21 22:31:56

0

如果您在使用Ruby 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 ATM):

bundle update shoulda-matchers 
相關問題