Ruby on rails 没有路线匹配 背景

Ruby on rails 没有路线匹配 背景,ruby-on-rails,testing,get,routes,Ruby On Rails,Testing,Get,Routes,我已经创建了一个电影评论应用程序,允许登录用户添加和编辑电影,以及为每部电影留下评论 问题 我正在测试我的控制器,但我不断得到: 3) Error: ReviewsControllerTest#test_should_get_edit: ActionController::UrlGenerationError: No route matches {:action=>"edit_movie_review", :controller=>"reviews"} test/contro

我已经创建了一个电影评论应用程序,允许登录用户添加和编辑电影,以及为每部电影留下评论

问题 我正在测试我的控制器,但我不断得到:

3) Error:
 ReviewsControllerTest#test_should_get_edit:
 ActionController::UrlGenerationError: No route matches
 {:action=>"edit_movie_review", :controller=>"reviews"}
 test/controllers/reviews_controller_test.rb:34:in `block in  <class:ReviewsControllerTest>'

4) Error:
ReviewsControllerTest#test_should_get_new:
ActionController::UrlGenerationError: No route matches {:action=>"new",    :controller=>"reviews"}
test/controllers/reviews_controller_test.rb:17:in `block in <class:ReviewsControllerTest>'


5) Error:
ReviewsControllerTest#test_should_show_review:
ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"reviews", :id=>"1"}
test/controllers/reviews_controller_test.rb:29:in `block in <class:ReviewsControllerTest>'



6) Error:
ReviewsControllerTest#test_should_create_review:
ActionController::UrlGenerationError: No route matches {:action=>"create", :controller=>"reviews", :review=>{:comment=>"MyText", :rating=>"1"}}
test/controllers/reviews_controller_test.rb:23:in `block (2 levels) in     <class:ReviewsControllerTest>'
test/controllers/reviews_controller_test.rb:22:in `block in <class:ReviewsControllerTest>'
Reviews控制器测试:

require 'test_helper'

class ReviewsControllerTest < ActionController::TestCase

setup do
  @review = reviews(:one)
  @user = users(:one)
end

test "should get index" do
  get :index
  assert_response :success
  assert_not_nil assigns(:review)
end

test "should get new" do
  get :new
  assert_response :success
end

test "should create review" do
  assert_difference('Review.count') do
   post :create, review: { comment: @review.comment, rating: @review.rating }
  end
 assert_redirected_to review_path(assigns(:review))
 end

test "should show review" do
  get :show, id: @review
  assert_response :success
end

test "should get edit" do
  get :edit_movie_review, @review
  assert_response :success
end

test "should update review" do
 put :update
 assert_redirected_to review_path(assigns(:review))
end

test "should destroy review" do
  assert_difference('Review.count', -1) do
  delete :destroy, id: @review
  end

  assert_redirected_to reviews_path
end

end
需要“测试助手”
类ReviewControllerTest
ReviewController.rb:

class ReviewsController < ApplicationController
 before_action :find_movie
 before_action :find_review, only: [:edit, :update, :destroy]
 before_action :authenticate_user!, only: [:new, :edit]

 def new
     @review = Review.new
 end

 def create
    @review = Review.new(review_params)
    @review.user_id = current_user.id
    @review.movie_id = @movie.id

     if @review.save #if a review is succesfully saved, redirect user to home
         redirect_to movie_path(@movie)
     else
         render 'new'
     end
 end

 def edit
 end

 def update
     if @review.update(review_params)
        redirect_to movie_path(@movie)
     else 
         render 'edit'
     end
 end

 def destroy
     @review.destroy
     redirect_to movie_path(@movie)
 end

  private

  def review_params
     params.require(:review).permit(:rating, :comment)
  end

  def find_movie
     @movie = Movie.find(params[:movie_id]) 
  end

  def find_review
     @review = Review.find(params[:id])
  end
end
class-ReviewsController
我是编程界的新手,因此非常感谢任何形式的建议


提前谢谢

您可以通过您的路线通过
movie\u id
。在您的
新的
操作测试中尝试此方法,您也可以在其他操作中遵循相同的模式

注意:您的
ReviewsController
没有
index
show
操作

require 'test_helper'

class ReviewsControllerTest < ActionController::TestCase

  setup do
    @movie = movies(:one)
    @review = reviews(:one)
    @user = users(:one)
  end

  #test "should get index" do
   # get :index
   # assert_response :success
   # assert_not_nil assigns(:review)
  #end

  test "should get new" do
    get :new, movie_id: @movie.id
    assert_response :success
  end

  test "should create review" do
    assert_difference('Review.count') do
      post :create, movie_id: @movie.id ,review: { comment: @review.comment, rating: @review.rating }
    end
     assert_redirected_to movie_path(assigns(:review))
  end

  test "should get edit" do
    get :edit, movie_id: @movie.id, id: @review.id
    assert_response :success
  end

 test "should update review" do
    put :update, movie_id: @movie.id, id: @review.id, review: { comment: @review.comment, rating: @review.rating } 
    assert_redirected_to movie_path(assigns(:review))
 end

 test "should destroy review" do
    assert_difference('Review.count', -1) do
      delete :destroy, id: @review, movie_id: @movie.id
    end
 end

end
需要“测试助手”
类ReviewControllerTest
我为我的新操作尝试了这一点,但我得到了“预期响应为a,但为”更新:在setup do下添加“sign_in@user”已修复了我的新操作的上述错误,但我的其余操作仍然得到“No route matches”
require 'test_helper'

class ReviewsControllerTest < ActionController::TestCase

  setup do
    @movie = movies(:one)
    @review = reviews(:one)
    @user = users(:one)
  end

  #test "should get index" do
   # get :index
   # assert_response :success
   # assert_not_nil assigns(:review)
  #end

  test "should get new" do
    get :new, movie_id: @movie.id
    assert_response :success
  end

  test "should create review" do
    assert_difference('Review.count') do
      post :create, movie_id: @movie.id ,review: { comment: @review.comment, rating: @review.rating }
    end
     assert_redirected_to movie_path(assigns(:review))
  end

  test "should get edit" do
    get :edit, movie_id: @movie.id, id: @review.id
    assert_response :success
  end

 test "should update review" do
    put :update, movie_id: @movie.id, id: @review.id, review: { comment: @review.comment, rating: @review.rating } 
    assert_redirected_to movie_path(assigns(:review))
 end

 test "should destroy review" do
    assert_difference('Review.count', -1) do
      delete :destroy, id: @review, movie_id: @movie.id
    end
 end

end