2

rails 3.2.3 を Guard/spork/rspec/factory_girl で実行し、spec ヘルパーに次のように記述します。

Spork.prefork do
  ...
  RSpec.configure do |config|
    config.include FactoryGirl::Syntax::Methods
    config.include Devise::TestHelpers, :type => :controller
    ...
  end 
end

そして、これが機能するように適切なモデル/工場をセットアップしてください。

describe "GET index" do
  describe "as logged in Person without Attendee record" do
    @person = create :person
    sign_in @person
    it "redirects to Attendee new page" do
      visit school_programs_root
      current_path.should == new_school_programs_attendees
    end 
  end 
end 

ただし、仕様を実行すると、次のようになります。

Exception encountered: #<NoMethodError: undefined method `create' for #<Class:0x007f860825a798>>

仕様の 3 行目を次のように変更すると:

@person = FactoryGirl.create :person

ファクトリが作成されますが、次のようになります。

Exception encountered: #<NoMethodError: undefined method `sign_in' for #<Class:0x007fcee4364b50>>

これはすべて、コントローラー仕様に対してヘルパーがロードされていないことを示唆しています。

4

2 に答える 2

2

クラスのリロードに関連して、Spork と FactoryGirl の間に既知の問題があります。私が何年も使用してきたこのメカニズムは、かつて Spork Wiki で文書化されていましたが、消えてしまいました (なぜ? -- まだ必要なようです)。それはまだgithub の FactoryGirl の問題レポートとして文書化されています。

簡単に言えば:

Gemfile、FactoryGirl の自動要求をオフにします。

gem 'factory_girl_rails', '~> 3.5.0', require: false

spec_helper.rbのブロックで、 FactoryGirleach_runを要求し、構文メソッドを含めます。

Spork.each_run do
  # This code will be run each time you run your specs.
  require 'factory_girl_rails'

  RSpec.configure do |config|
    config.include FactoryGirl::Syntax::Methods
  end

end

これにより、最初のエラーが修正されます。sign_in2番目のエラーであるDeviseエラーでは、ブロック内で実行する必要がありbeforeます。以下の例の修正を参照してください。それはあなたのために働くはずです。

describe "GET index" do
  describe "as logged in Person without Attendee record" do
    before do    
      @person = create :person
      sign_in @person
    end

    it "redirects to Attendee new page" do
      visit school_programs_root
      current_path.should == new_school_programs_attendees
    end 
  end 
end 
于 2012-06-25T00:05:48.807 に答える
-1

仕様に追加:

include Devise::TestHelpers
于 2012-04-16T08:30:04.177 に答える