0

我有一个测试试图查看不存在的订阅。我和我的灯具中的一群用户一起运行这个测试。对于具有管理员角色的用户,当应用程序达到尝试呈现响应的程度时,它已将操作从更改:show:edit并删除了id参数。然而,当我尝试使用 byebug 来跟踪执行时,我似乎永远无法确定它何时发生。

我的测试是:

test "#{u.role} can not view subscriptions that don't exist" do
  self.send('sign_in_' + u.role)
  get :show, id:1234567890
  assert_redirected_to root_path
  assert_includes flash[:alert], "That subscription doesn't exist"
end

u从我的固定装置加载的用户在哪里。

我得到的错误是:

SubscriptionsControllerTest#test_admin_can_not_view_subscriptions_that_don't_exist:
ActionView::Template::Error: No route matches {:action=>"edit", :controller=>"subscriptions", :id=>nil} missing required keys: [:id]
    app/views/subscriptions/show.html.erb:13:in `_app_views_subscriptions_show_html_erb__1518678276755260966_70268849069860'
    test/controllers/subscriptions_controller_test.rb:58:in `block (2 levels) in <class:SubscriptionsControllerTest>'

我的控制器看起来像这样:

class SubscriptionsController < ApplicationController
  load_and_authorize_resource except: [:create,:new]
  before_action :set_subscription
  def show
  end
  def edit
  end
...
  private
    def subscription_params
      params.require(:subscription).permit(:email,:confirmed)
    end
    def set_subscription
      #byebug if user_signed_in? && current_user.role == 'admin' && self.action_name == 'show'
        begin
          if (params.has_key? :id) && (controller_name == 'subscriptions')
            @subscription = Subscription.find(params[:id])
          elsif user_signed_in?
            @subscription = current_user.subscription || Subscription.new(email: current_user.email)
          else
            @subscription = Subscription.new
          end
        rescue ActiveRecord::RecordNotFound
          @subscription = Subscription.new
          flash.alert = "That subscription doesn't exist"
        end
    end
end

load_and_authorize_resource来自康康康。

我与此测试相关的路线是:

  resources :subscriptions do
    member do
      get 'confirm'
    end
  end

我真的不知道从这里去哪里,所以任何建议将不胜感激。

4

2 回答 2

1

查看此异常的堆栈跟踪:

SubscriptionsControllerTest#test_admin_can_not_view_subscriptions_that_don't_exist:
ActionView::Template::Error: No route matches {:action=>"edit", :controller=>"subscriptions", :id=>nil} missing required keys: [:id]
    app/views/subscriptions/show.html.erb:13:in `_app_views_subscriptions_show_html_erb__1518678276755260966_70268849069860'
    test/controllers/subscriptions_controller_test.rb:58:in `block (2 levels) in <class:SubscriptionsControllerTest>'

app/views/subscriptions/show.html.erb,第 13 行。您是否使用ID调用link_to(或类似的辅助方法) ?nil

于 2015-06-29T22:10:17.180 回答
0

看看你的错误信息。它说id参数丢失。你有可能给它一个nil价值。因此,路由器无法正确路由请求。

此外,错误是针对edit操作的请求,但您显示的代码正在调用show操作。您能否清理显示的代码示例和错误消息并使它们保持一致?

于 2015-06-29T18:37:10.010 回答