3

最近、Rails(3.0.8) アプリで rspec-rails(2.6.1) を使い始めました。私は Test::Unit に慣れていますが、私のテスト メソッドに対してフィルターを機能させることができないようです。私は物事をできるだけ DRY に保つのが好きなので、テスト メソッドが呼び出される前に Authlogic ユーザーとしてログインする任意のテスト メソッドで呼び出すことができるフィルターを設定したいと思います。spec_helper.rb でRSpec フィルターを使用して、これを達成しようとしました。

config.before(:each, :login_as_admin => true) do 
  post "/user_sessions/create", :user_session => {:username => "admin", :password => "admin"}   
end

次に、対応するテスト メソッド (この場合は spec/controllers/admin_controller_spec.rb) で使用します。

require 'spec_helper'

describe AdminController do  
  describe "GET index" do        
    it("gives a 200 response when visited as an admin", :login_as_admin => true) do   
      get :index
      response.code.should eq("200")
    end    
  end
end

ただし、rspec specを実行すると、次のエラーが発生します。

Failures:

  1) AdminController GET index gives a 200 response when visited as an admin
     Failure/Error: Unable to find matching line from backtrace
     RuntimeError:
       @routes is nil: make sure you set it in your test's setup method.

ブリーチ。テストごとに 1 つの HTTP 要求のみを送信できますか? また、authenticate_admin メソッド (config.before ブロック内) をスタブ化しようとしましたが、運がありませんでした。

4

2 に答える 2

4

before残念ながら、グローバルに定義されたフックであなたがしようとしていることを現時点で行う方法はありません。その理由は、beforeフックは登録された順序で実行され、宣言されたフックは、コントローラー、要求、応答などを設定するために内部的に登録RSpec.configureされるものの前に登録されるためです。rspec-rails

また、これはhttps://github.com/rspec/rspec-rails/issues/391に報告されています。

于 2011-06-18T12:18:07.963 に答える
-1

シュルダのマクロンを使用する必要があります。使用するには、spec_helper.rb を変更する必要があります

RSpec.configure do |config|
  config.include Clearance::Shoulda::Helpers
end

そして、次のようにコントローラー仕様でフィルターを設定できます

require 'spec_helper'

describe AdminController do  
  fixture :users

  before(:each) do
    sign_in_as users(:your_user)
  end
  describe "GET index" do        
    it("gives a 200 response when visited as an admin", :login_as_admin => true) do   
      get :index
      response.code.should eq("200")
    end    
  end
end
于 2011-06-18T07:37:52.090 に答える