1

スペックテストを開始すると、このエラーが発生します。ユーザーとのつながりが設定されていないことを理解しています。テストに合格するにはどうすればよいですか?

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)>'
4

1 に答える 1

2

Postとのモデルが表示されUserない場合は、変更する必要があるようです

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

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

また

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

アソシエーションを正しくセットアップします。

ただし、ビューが a にPost 常にがあると想定している場合はUserPostモデルで a の存在を検証するか、 a にがないUser場合を処理するようにビューを変更する必要があります。PostUser

于 2012-05-04T14:13:43.030 に答える