2012-09-18 23 views
0

當我試圖告訴水豚visit ('/')時,我有以下失敗的測試。水豚未定義方法`標記?'爲零:NilClass

1) Credits when user is non-enabled show user credits available at the top. 
    Failure/Error: visit ('/') 
    NoMethodError: 
    undefined method `tag?' for nil:NilClass 
    # ./app/controllers/application_controller.rb:16:in `set_current_tag' 
    # ./spec/requests/credits_spec.rb:12:in `block (3 levels) in <top (required)>' 

ApplicationController的代碼看起來像這樣

def set_current_site 
    current_host = request.host 
    @site = Site.where(domain: current_host).first 
    @site = Site.where(domain: 'mysiste.com').first unless @site.present? 
end 

def set_current_tag 
    if @site.tag? && Dvd.tagged_with(@site.tag, wild: true, any: true).any? 
    @site.tag = @site.tag 
    elsif params[:tag] && Dvd.tagged_with(params[:tag], wild: true, any: true).any? 
    @site.tag = params[:tag] 
    else 
    @site.tag = '' 
    end 
end 

我有點失去了這裏如何解決這個,什麼將是對這一理想的解決方案。我是否應該將實例變量的設計更改爲方法,並將SiteGirl用於Site?

網站模型非常簡單。

class Site < ActiveRecord::Base 
    attr_accessible :domain, :content, :program, :tag, :locale, :parent, :title, :landing 

    validates_presence_of :domain 
    validates_uniqueness_of :domain 

end 

,工廠是

FactoryGirl.define do 
    factory :site do 
    domain "dvdstore.com" 
    title  "DVD Store" 
    program "premium" 
    content "movies" 
    end 
end 
+0

粘貼您的網站模型 – Trace

+0

@Trace請參閱Site model的更新問題。 – Martin

+0

你沒有self.tag?方法在你的網站模型....你在哪裏得到這個 – Trace

回答

1

嘗試添加到credits_spec.rb:

before do 
    @site = FactoryGirl.create(:site) 
    @request.host = @site.domain 
end 

默認情況下,請求主機是 'www.example.com',猜你不沒有該域名的網站記錄。

爲找不到網站(@site = Site.where(domain: 'mysiste.com').first unless @site.present?)回退可能不會太工作:

  1. 它依賴於與域「mysiste.com」數據庫項,但每個測試與默認是空的DB開始。你有沒有創建這樣的條目?
  2. 有可能是拼寫錯誤的域名:中mysiste.com代替mysite.com

所以,當你運行你的天賦,@site沒有發現那位和未設置。

+0

大部分時間與你回答的時間大致相同。謝謝! – Martin

相關問題