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