0

Rails 3.2 で抱えているこの問題について、私は頭を悩ませてきました。これを行う簡単な統合テストがあります。

require 'test_helper'

class UserFlowsTest < ActionDispatch::IntegrationTest
  fixtures :posts, :comments

  test "should delete comment" do
    post = posts(:one)
    comment = comments(:one)
    delete post_comment_path, :post_id => post.id, :id => comment.id
    assert_response :redirect
    assert_assign (:post)
  end
end

モデルは Rails ガイドに見覚えがあるかもしれません。とにかく、私が電話するとき、私はrake:integrationこれで終わります。

test_should_delete_comment(UserFlowsTest):
ActionController::RoutingError: No route matches {:action=>"show", :controller=>"comments"}
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:533:in `raise_routing_error'
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:529:in `rescue in generate'
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:521:in `generate'
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:562:in `generate'
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:587:in `url_for'
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/routing/url_for.rb:148:in `url_for'
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/routing/route_set.rb:213:in `post_comment_path'
    C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.12/lib/action_dispatch/testing/integration.rb:382:in `method_missing'
    C:/dev/blog/test/integration/user_flows_test.rb:9:in `block in <class:UserFlowsTest>'

私のルートはそのように定義されています。

             root        /                                           home#index
     posts_search GET    /posts/search(.:format)                     posts#search
       home_index GET    /home/index(.:format)                       home#index
    post_comments GET    /posts/:post_id/comments(.:format)          comments#index
                  POST   /posts/:post_id/comments(.:format)          comments#create
 new_post_comment GET    /posts/:post_id/comments/new(.:format)      comments#new
edit_post_comment GET    /posts/:post_id/comments/:id/edit(.:format) comments#edit
     post_comment GET    /posts/:post_id/comments/:id(.:format)      comments#show
                  PUT    /posts/:post_id/comments/:id(.:format)      comments#update
                  DELETE /posts/:post_id/comments/:id(.:format)      comments#destroy
            posts GET    /posts(.:format)                            posts#index
                  POST   /posts(.:format)                            posts#create
         new_post GET    /posts/new(.:format)                        posts#new
        edit_post GET    /posts/:id/edit(.:format)                   posts#edit
             post GET    /posts/:id(.:format)                        posts#show
                  PUT    /posts/:id(.:format)                        posts#update
                  DELETE /posts/:id(.:format)                        posts#destroy

私は何を間違っていますか?

編集:

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

  def destroy
    @post = Post.find(params[:post_id])
    @comment = @post.comments.find(params[:id])
    @comment.destroy
    redirect_to post_path(@post)
  end
end

ここで何が問題なのかわかりません。

4

1 に答える 1

1

私はかなり長い間 Test::Unit を定期的に使用していませんでしたが (最近は RSpec を使用しています)、統合テストがあまり必要だった覚えはありません。テストの大部分は、ユニットと機能に関するものでした。

この特定のテストは、実際には統合テストではありません。ドメイン間の情報の流れをテストしているわけではありません。ネストされたリソースを破棄した後にリダイレクトがあることを確認するだけです。これが私が試したいことです。古い構文はご容赦ください。ファイルを想定test/functional/comments_controller_test.rb

require 'test_helper'

class CommentsControllerTest < ActionController::TestCase
  fixtures :posts, :comments

  def test_destroy
    post = posts(:one)
    comment = comments(:one)
    delete :destroy, :id => comment.id, :post_id => post.id

    assert_redirected_to post_path(post)
    # and whatever else you want to test
  end
end
于 2013-04-21T15:30:19.303 に答える