我对Rails很新,而且我对Ruby的了解也非常生疏。无论如何,我正试图用正确的测试覆盖率以正确的方式编写我的第一个Rails应用程序。我一直在尝试按照getting started指南并将其与testing指南相结合来完成此操作。 (为什么这两件事没合并!?)
所以,现在我一直试图测试向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:
我的问题是我没有看到如何以惯用的Rails方式创建和引用Post作为评论的父级。
我该怎么做?
答案 0 :(得分:1)
您需要向创建请求添加参数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
此代码假设您已在灯具中定义了Post
标识的:post_one
。