1

失敗し続ける機能テストがありますが、その理由はわかりません。これはフォーラムの一部であり、テストは投稿の作成者が自分の投稿を削除できることを確認することです。

手動で試してみると、コンソールとブラウザで投稿を破棄できますが、何が問題になっているのか理解できません。

コントローラの破棄アクションは次のとおりです。

def destroy
  @post = Post.find(params[:id])
  if @post.player_id == current_player || current_player.admin == true # I can't delete anyone else's posts unless I am the administrator.
if @post.topic.posts_count > 1 # if topic is more than one post, delete just the post
    @post.destroy
    flash[:notice] = "Post was successfully destroyed."
    redirect_to topic_path(@post.topic)
else # else, if the topic is only one post, delete the whole thing
  @post.topic.destroy
  flash[:notice] = "Topic was successfully deleted."
  redirect_to forum_path(@post.forum)
    end
  else # You are not the admin or the topic starter
    flash[:notice] = "You do not have rights to delete this post."
    redirect_to topic_path(@post.topic)
  end
end

これがposts.ymlファイルです:

one:
  id: 1
  body: MyText
  forum_id: 1
  topic_id: 1
  player_id: 2
two:
  id: 2
  body: MyText
  forum_id: 1
  topic_id: 1
  player_id: 2
three:
  id: 3
  body: MyText
  forum_id: 1
  topic_id: 2
  player_id: 3

失敗し続けるテストは次のとおりです。

test "should destroy post as author" do
  sign_in players(:player2)
  assert_difference('Post.count', -1) do # Line 41
    delete :destroy, :id => posts(:one)
  end
  assert_redirected_to topic_url(assigns(:topic))
end

そして、これが私が得ているエラーです:

1) Failure: test_should_destroy_post_as_author(PostsControllerTest) [../test/functional/posts_controller_test.rb:41]:
"Post.count" didn't change by -1.
<2> expected but was <3>.

私はこれでどんな助けでも大いに感謝します。答えが私が見逃している単純なものであると確信しているとき、私は壁に頭をぶつけているような気がします。前もって感謝します。

4

1 に答える 1

0

その特定の表現が機能しない理由はわかりませんが、コンソールで行うように投稿を破棄したときにテストに合格するように修正しました。

それ以外の:delete :destroy, :id => @post

私が使用した:Post.destroy(@post)

于 2012-07-31T16:33:30.497 に答える