在Rails中测试属于一个帖子的评论的控制器



我对Rails非常陌生,我的Ruby知识也相当生疏。无论如何,我正在尝试以正确的方式编写我的第一个Rails应用程序,并具有良好的测试覆盖率。我一直在尝试遵循入门指南,并将其与测试指南相结合来完成此任务。(为什么这两件事没有合并!?)

所以,现在我被困在试图测试添加一个方法到Comments控制器:

class CommentsController < ApplicationController
  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.create(params[:comment])
    redirect_to post_path(@post)
  end
end

这就是我的测试结果:

class CommentsControllerTest < ActionController::TestCase  
  setup do
    @comment = comments(:one)
  end
  test "should create comment" do
    assert_difference('Comment.count') do
      post :create, comment: { body: @comment.body, commenter: @comment.commenter, ???? }
    end
    assert_redirected_to post_path(assigns(:post)) #???? 
  end
end

使用这个夹具

one:
  commenter: mystring
  body: mytext
  post: 
two:
  commenter: mystring
  body: mytext
  post: 

我的问题是我不知道如何创建和引用一个Post作为评论的父级在一个习惯的Rails方式。

我该怎么做呢?

您需要在创建请求中添加一个参数post_id(此post_id由控制器中的@post = Post.find(params[:post_id])行使用)。例子:

class CommentsControllerTest < ActionController::TestCase  
  setup do
    @comment = comments(:one)
    @post = posts(:post_one)
  end
  test "should create comment" do
    assert_difference('Comment.count') do
      post :create, comment: { body: @comment.body, commenter: @comment.commenter }, post_id: @post.id
    end    
    assert_redirected_to post_path(assigns(:post))
  end
end

此代码假设您已经在fixture中定义了一个由:post_one标识的Post

最新更新