seq*_*e90 3 ruby ruby-on-rails
我得到一个ActionController :: UrlGenerationError:没有路由匹配(:action =>"edit",:controller =>"目标")错误,当我试图测试目标控制器
这是我的goals_controller_test.rb
require 'test_helper'
class GoalsControllerTest < ActionController::TestCase
test "should be redirected when not logged in" do
get :new
assert_response :redirect
assert_redirected_to new_user_session_path
end
test "should render the new page when logged in" do
sign_in users(:guillermo)
get :new
assert_response :success
end
test "should get edit" do
get :edit
assert_response :success
end
test "should get show" do
get :show
assert_response :success
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的routes.rb
Rails.application.routes.draw do
devise_for :users
authenticated :user do
root 'du#dashboard', as: "authenticated_root"
end
resources :goals
root 'du#Home'
end
Run Code Online (Sandbox Code Playgroud)
我的goal_controller.rb
class GoalsController < ApplicationController
before_filter :authenticate_user!, only: [:new]
def new
end
def edit
end
def show
end
private
def find_user
@user = User.find(params[:user_id])
end
def find_goal
@goal = Goal.find(params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪,如果我使用获取'目标/编辑'而不是资源:测试通过的目标.
非常感谢你的任何指导方针.
mar*_*ets 10
当您使用resources :goalsRails为您生成以下路由(RESTful)时:
goals GET /goals(.:format) goals#index
POST /goals(.:format) goals#create
new_goal GET /goals/new(.:format) goals#new
edit_goal GET /goals/:id/edit(.:format) goals#edit
goal GET /goals/:id(.:format) goals#show
PATCH /goals/:id(.:format) goals#update
PUT /goals/:id(.:format) goals#update
DELETE /goals/:id(.:format) goals#destroy
Run Code Online (Sandbox Code Playgroud)
如你所见,要点击你需要传递的edit动作.这样,在您的控制器中,您将能够通过给定的=> 找到记录.因此,在您的测试中,您需要传递此信息,例如:/goals/:id/edit:id:idGoal.find(params[:id]):id
get :edit, id: 1 # mapping to /goals/1/edit
Run Code Online (Sandbox Code Playgroud)
如果您手动添加此路由get 'goals/edit',它可以正常工作,因为它直接映射到/goals/edit(注意没有:id).
顺便说一下,我建议你查看官方的路由指南:http://guides.rubyonrails.org/routing.html