2012-05-04 63 views
1

開始spec測試時出現此錯誤。我知道與用戶的連接沒有設置。我該怎麼做才能通過考試?RSpec:ActionView :: Template :: Error:未定義的方法`full_name'爲零:NilClass

RSpec的文件:posts_controller_spec.rb

require 'spec_helper' 
include Devise::TestHelpers 

describe PostsController do 
    render_views 

    context "Logged in as user" do 
    let(:user) { FactoryGirl.create(:user) } 

    before { login_as(user) } 

    context "on viewing index page" do 
     let!(:p) { FactoryGirl.create(:post) } 

     before { get :index } 

     it { should respond_with(:success) } 

     it { assigns(:posts).should == [p] } 
    end 
    end 
end 

我的觀點:_home.html.erb

<% @posts.each do |post| %> 
    <%= link_to post.title, post %> 

    <%= post.user.full_name %></i></b><hr /> 

    <div> 
     <%= post.content.html_safe %> 
    </div> 
<% end %> 

RSpec的故障:

PostsController Logged in as user on viewing index page 
    Failure/Error: before { get :index } 
    ActionView::Template::Error: 
     undefined method `full_name' for nil:NilClass 
    # ./app/views/posts/_home.html.erb:5:in `block in _app_views_posts__home_html_erb__709569216_93469850' 
    # ./app/views/posts/_home.html.erb:2:in `each' 
    # ./app/views/posts/_home.html.erb:2:in `_app_views_posts__home_html_erb__709569216_93469850' 
    # ./app/views/posts/index.html.erb:1:in `_app_views_posts_index_html_erb___825727830_90641210' 
    # ./spec/controllers/posts_controller_spec.rb:33:in `block (4 levels) in <top (required)>' 

回答

2

沒有看到你的模型PostUser ,它看起來像你需要改變

let!(:p) { FactoryGirl.create(:post) } 

let!(:p) { FactoryGirl.create(:post, :user => user) } 

let!(:p) { FactoryGirl.create(:post, :user_id => user.id) } 

正確設置的關聯。

但是,如果你的觀點是假設一個Post總是User,也許你Post模型應該驗證User的存在,也許你應該改變你的觀點來處理的情況下一個Post沒有一個User

+0

很酷,非常感謝! –

相關問題