Ruby on rails ActionController::TestCase中的调用成员路由

Ruby on rails ActionController::TestCase中的调用成员路由,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是Ruby新手,必须为Rails应用程序编写测试 我的问题是我不知道如何调用友谊控制器的接受操作 这是友谊控制器: class FriendshipsController < ApplicationSocialController # ... # create method is getting called def create # accessing params[:user_id] end # accept method doesn't get ca

我是Ruby新手,必须为Rails应用程序编写测试

我的问题是我不知道如何调用
友谊控制器的
接受
操作

这是
友谊控制器

class FriendshipsController < ApplicationSocialController
  # ...

  # create method is getting called
  def create
    # accessing params[:user_id]
  end

  # accept method doesn't get called
  def accept
    # accessing params[:id] and params[:user_id]
  end
end
但是我如何调用
FriendsController.accept
方法呢

current_user = users(:users_002)
friend_user = users(:users_003)
friendship_from_current_to_friend = create_friendship(current_user, friend_user)
# friend_user should can accept friendship request
@request.session[:user_id] = friend_user.id
put :accept, :user_id => current_user.id, :id => friendship_from_current_to_friend.id
put
调用正常工作,但从未调用
FriendshipsController
accept

这是路线。rb

RedmineApp::Application.routes.draw do
  # ...
  resources :users do
    # ...
    resources :friendships do
      # ...
      member do
        put :accept
        put :deny
      end
    end
  end
  # ...
end
调用
接受
的正确方法是什么

编辑

这是一张路线图

GET /users/:user_id/friendships/accepted(.:format) friendships#accepted GET /users/:user_id/friendships/pending(.:format) friendships#pending GET /users/:user_id/friendships/denied(.:format) friendships#denied GET /users/:user_id/friendships/write_message(.:format) friendships#write_message PUT /users/:user_id/friendships/:id/accept(.:format) friendships#accept PUT /users/:user_id/friendships/:id/deny(.:format) friendships#deny GET /users/:user_id/friendships(.:format) friendships#index POST /users/:user_id/friendships(.:format) friendships#create GET /users/:user_id/friendships/new(.:format) friendships#new GET /users/:user_id/friendships/:id/edit(.:format) friendships#edit GET /users/:user_id/friendships/:id(.:format) friendships#show PUT /users/:user_id/friendships/:id(.:format) friendships#update DELETE /users/:user_id/friendships/:id(.:format) friendships#destroy GET/users/:user_id/friendships/accepted(:format)friendships#accepted GET/users/:user_id/friendships/pending(:format)friendships#pending GET/users/:user_id/friendships/denied(:format)friendships#denied GET/users/:user_id/friendships/write_message(:format)friendships#write_message PUT/users/:user_id/friendships/:id/accept(:format)friendships#accept PUT/users/:user_id/friendships/:id/deny(:format)friendships#deny GET/users/:用户id/友谊(:格式)友谊#索引 POST/users/:用户id/友谊(:格式)友谊#创建 GET/users/:user_id/friendships/new(:format)friendships#new GET/users/:user_id/friendships/:id/edit(:format)friendships#edit GET/users/:user_id/friendships/:id(:format)friendships#show PUT/users/:user_id/friendships/:id(:format)friendships#update 删除/users/:user_id/friendships/:id(:format)friendships#销毁
尝试使用
$rake路由

           Prefix Verb   URI Pattern                       Controller#Action
      friendships GET    /friendships(.:format)            friendships#index
                  POST   /friendships(.:format)            friendships#create
   new_friendship GET    /friendships/new(.:format)        friendships#new
  edit_friendship GET    /friendships/:id/edit(.:format)   friendships#edit
       friendship GET    /friendships/:id(.:format)        friendships#show
                  PATCH  /friendships/:id(.:format)        friendships#update
                  PUT    /friendships/:id(.:format)        friendships#update
                  DELETE /friendships/:id(.:format)        friendships#destroy
accept_friendship PUT    /friendships/:id/accept(.:format) friendships#accept
  deny_friendship PUT    /friendships/:id/deny(.:format)   friendships#deny
                  GET    /friendships(.:format)            friendships#index
                  POST   /friendships(.:format)            friendships#create
                  GET    /friendships/new(.:format)        friendships#new
                  GET    /friendships/:id/edit(.:format)   friendships#edit
                  GET    /friendships/:id(.:format)        friendships#show
                  PATCH  /friendships/:id(.:format)        friendships#update
                  PUT    /friendships/:id(.:format)        friendships#update
                  DELETE /friendships/:id(.:format)        friendships#destroy
            users GET    /users(.:format)                  users#index
                  POST   /users(.:format)                  users#create
         new_user GET    /users/new(.:format)              users#new
        edit_user GET    /users/:id/edit(.:format)         users#edit
             user GET    /users/:id(.:format)              users#show
                  PATCH  /users/:id(.:format)              users#update
                  PUT    /users/:id(.:format)              users#update
                  DELETE /users/:id(.:format)              users#destroy
输出告诉我们,
accept\u friendsy
不接受
user\u id
param

put :accept, :id => friendship_from_current_to_friend.id
我发现了问题: 每个友谊请求由两个对应的友谊对象组成

在任何一个

  • 正确的用户,即。e、
    friend\u用户
    ,接受错误的友谊id
  • 错误的用户,即。e
    当前用户
    ,接受正确的友谊id
accept
方法将不调用


因此,如果正确的用户接受正确的友谊id,则accept方法将被调用为fine。但这并不能解释为什么accept方法不会被错误的输入调用。

谢谢!我运行
rake routes
,只得到一个空列表。但是通过
Rails.application.routes.routes.to_a
我能够通过编程获得这些路由。请看我的编辑。我认为需要
:user\u id
,否则我会得到一个
没有路由匹配{:user\u id=>“2”,:controller=>“friendships”,:action=>“accept”}
你能添加你的整个
路由.rb
吗?在你的问题中,
:友谊不嵌套在
:用户下。哦,对不起,这是我的错误。Edited routes.db您如何测试它是否被调用?这个电话看起来很完美fine@papirtiger我将
$stderr.put'create'
$stderr.put'accept'
放在控制器方法的顶部。之后,我可以在控制台上看到它,调用了哪个方法。
put :accept, :id => friendship_from_current_to_friend.id