繁体   English   中英

在ActionController :: TestCase中调用成员路由

[英]Call Member Routes in ActionController::TestCase

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

我的问题是我不知道如何调用FriendshipsControlleraccept动作

这是FriendshipsController

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

在以下测试代码中,我看到了FriendshipsController.create方法被调用:

current_user = users(:users_002)
friend_user = users(:users_003)
@request.session[:user_id] = current_user.id
post :create, :user_id => friend_user.id # works fine

但是如何调用FriendshipsController.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

这是routes.rb

RedmineApp::Application.routes.draw do
  # ...
  resources :users do
    # ...
    resources :friendships do
      # ...
      member do
        put :accept
        put :deny
      end
    end
  end
  # ...
end

调用accept的正确方法是什么?

编辑

这是路线的例外

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

尝试使用$ rake routes

           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_friendship不接受user_id参数。

put :accept, :id => friendship_from_current_to_friend.id

我发现了问题:每个友谊请求都包含两个相应的友谊对象

在任一

  • 正确的用户(例如friend_user )接受了错误的友谊ID
  • 错误的用户 ,即current_user ,接受正确的友谊ID

accept方法不会被调用。

因此,如果正确的用户接受正确的友谊ID,则accept方法将被罚款。 但这并不能弄清楚为什么没有用错误的输入来调用accept方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM