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

0

エラーメッセージを見てください。idパラメータが欠落していると表示されます。値を指定している可能性がありnilます。このため、ルーターはリクエストを適切にルーティングできません。

また、エラーはeditアクションへのリクエストですが、表示されているコードはアクションを呼び出していshowます。表示されているコード例とエラー メッセージをクリーンアップして、一貫性を保つことができますか?

于 2015-06-29T18:37:10.010 に答える