2

アプリケーションコントローラーで get リクエストをテストしたいのですが、仕様は次のようになります。

describe "GET some_get_method" do 
     it "should work" do
       get :some_get_method
    end
  end

しかし、これを行うと次のエラーが表示されます。

Failure/Error: get :some_get_method
     AbstractController::ActionNotFound:
       The action 'some_get_method' could not be found for ApplicationController

私のアプリケーションコントローラは次のようになります:

def some_get_method
    vari = params[:vari]

    if !vari
      render_something
      return false
    end
    true
  end

私のルートには次のものがあります。

namespace :application do
    get 'some_get_method/', :action => :some_get_method
  end
4

1 に答える 1

1

ApplicationController実際の関心は、そこから派生したコントローラーの動作にあるため、機能テストのために直接仕様を指定することはおそらく適切ではありません。

ただし、内のメソッドを単体テストするにApplicationControllerは、spec ファイル内にスタブ コントローラー (より適切には、テスト ヘルパー) を作成して、テストするメソッドを公開するだけにすることができますApplicationController

class StubController < ApplicationController
end

抽象クラスを試してインスタンス化することなく、 のStubメソッド (実際には のメソッド) を直接テストできるようになりました。Application

ルーティングを設定する

レンダリングをテストする必要がある場合、1 つの方法として、RSpec のリクエスト ハンドラーにアクセスできるテスト専用ルートを追加することが考えられます。

# in config/routes.rb
unless Rails.env.production?
  namespace :stub do
    get 'some_get_method', :action => :some_get_method
  end
end

# in spec
describe "GET some_get_method" do 
  it "should work" do
     get :some_get_method
     # test
  end
end
于 2012-09-19T15:53:02.053 に答える