2013-12-16 4 views
10

私はレール4アプリケーションを構築しています。私は奇妙な問題に直面しています。ログインをシミュレートするために作成したサポートファイルは、私に未定義のメソッドエラーを与えています。ここでrspec用のサポートファイルをレール4に含めるにはどうすればよいですか?

は、ファイルが

#spec/support/spec_test_helper.rb 
module SpecTestHelper 
    def login(user) 
    request.session[:user_id] = user.id 
    end 

    def current_user 
    User.find(request.session[:user_id]) 
    end 
end 

#spec_helper.rb 

config.include SpecTestHelper, :type => :controller 

と私のコントローラの仕様

describe BooksController, "user role" do 

    user = Fabricate(:user) do 
    role { Role.find_by_account_type("user") } 
    end 

    login(user) 
end 

ところで、私はカンカンをテストしていています。私はカンカンに能力をテストしてテストするための正しい方法を知っているが、それはすでに

これは、エラーメッセージの一部では:)行われています:

spec/controllers/books_controller_spec.rb:27:in `block in <top (required)>': undefined method `login' for #<Class:0x007f9f83193438> (NoMethodError) 
+0

正確なエラーメッセージを含めてください。 – screenmutt

答えて

2

ではなく、beforeまたはitブロック内login(user)コールを入れて直接describe内:

let(:user) do 
    Fabricate(:user) do 
    role { Role.find_by_account_type("user") } 
    end 
end 

before do 
    login(user) 
end 
+0

はい!そんなに問題ありがとうございました。 – Ricbermo

20

私はspec_helper.rbにこの行を追加し、それが第三レールで動作

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

たぶん別の(よりかなり)ソリューションは、@gotvaが提供する答えに

+0

私のspec_helper.rbはすでにそれを持っています。ありがとう – Ricbermo

+1

@アッシュの答えに注意を払う - あなたは本当にレコードを構築し、その中/前に/メソッドを呼び出す必要があります... – gotva

2

代替が存在します。それは少し冗長だが、両方のレール3と4で動作します:私はレールのバージョン4.2.4を使用していると私は、supportフォルダの下にファイルを追加するために昨日を苦しんでいた

Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f} 
7

。 問題は、rspecディレクトリの下で2つのファイルの異なる目的に気付かなかったことです。私はrails_helper.rbとspec_helper.rbの両方を持っています。あなたがレールに依存するクラスのサポートを提供したい場合は、「仕様/サポート」DIR

Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } 

下のモジュールをロードするために、あなたが内部で使用する共有モジュールを宣言するためにレールを伝えるためにrails_helperを使用する必要がありますconfigブロック。

RSpec.configure do |config| 
    ... 
    config.include <YourModuleName>::<YourClassName>, :type => :controller 
    ... 
end 

しかし、あなたのクラスは、すべてのレールを必要としない場合は、テストを実行するためにレールをロードしないであろう、spec_helperの下でそれを読み込むことができます。 詳細については、this answerおよびthis referenceを参照してください。

関連する問題