2016-08-10 1 views
0

に一致し、それは私に与えている:RSpecのレール:IDを持つポストを見つけることができませんでし取得/いいえルートは、私はRSpecので<code>create</code>アクションをテストしてい

のActiveRecord :: RecordNotFound: がでポストを見つけることができませんでした ' id '=:post_id

わからない理由は何ですか?

スペック:

describe CommentsController do 
    it "#create" do 
    post1 = create(:post) 
    post :create, comment: attributes_for(:comment, post_id: post1.id) 
    p Comment.count 
    end 
end 

createアクション:

def create 
    @comment = @post.comments.build(comment_params) 
    @comment.user_id = current_user.id 

    respond_to do |format| 
     if @comment.save 
     format.json { render json: @comment } 
     end 
    end 
    end 

アクション前:

before_action :authenticate_user! 
    before_action :find_post, only: [:index, :create, :destroy] 

のルート:私は、問題は、あなたがのparamsでpost_idを送信していないと思い

describe CommentsController do 
    it "#create" do 
    post1 = create(:post) 
    post :create, { post_id: post1.id, comment: attributes_for(:comment, post_id: post1.id) } 
    p Comment.count 
    end 
end 

post_comments GET /posts/:post_id/comments(.:format)  comments#index 
       POST /posts/:post_id/comments(.:format)  comments#create 
    post_comment DELETE /posts/:post_id/comments/:id(.:format) comments#destroy 
+0

いくつかのstacktraceと 'find_post'メソッドを共有してください。 –

答えて

1

はこれを試してみてください。

+0

テストパスですが、 'Comment.count'は' 0'で、 '1'にする必要があります。 – mrvncaragay

+0

コメントにはいくつかの検証に失敗する必要があります。 –

+0

この 'if @ comment.save'をあなたのコントローラの中の' if @ comment.save! 'に置き換えてください。 –

0

問題はpost_idを正しく渡していないことです。このようにしてfind_postメソッドでデバッグする方法、そこにパラメータが来る方法。

+0

私の答えと同じです。 –

関連する問題