1

Rspec2 + Spork + Guard + Deviseをセットアップしました

私のファイルは次のとおりです

#spec_helper.rb
Spork.prefork do
  #code
  Dir[Rails.root.join('spec/support/**/*.rb')].each {|f| require f}
  RSpec.configure do |config|
    config.extend ControllerMacros, :type => :controller 
  end 
end

Spork.each_run do
  # This code will be run each time you run your specs.
  FactoryGirl.reload
  include ControllerMacros
end

#spec/support/controller_macros.rb
module ControllerMacros
    def login_user
      before(:each) do
        @request.env["devise.mapping"] = Devise.mapping[:user]
        user = FactoryGirl.create(:user)
        sign_in user
      end
    end
end

#spec/support/devise.rb
Spec.configure do |config|
    config.include Devise::TestHelpers, :type => :controller
end

私のリクエスト仕様で

#spec/features/documents_spec.rb
require 'spec_helper'

describe "Documents" do

  login_user

  describe "GET /documents" do
    it "should display document name as sameera CV" do
      #spec code
    end
  end
end

そして、私が実行するbundle exec guardと、私は得る

  1) Documents GET /documents should display document name as sameera CV
     Failure/Error: Unable to find matching line from backtrace
     NoMethodError:
       undefined method `env' for nil:NilClass
     # ./spec/support/controller_macros.rb:4:in `block in login_user'

これまでのところ、Google経由で多くの修正を行ってきましたが、何も機能していないようです。誰かが私を助けてくれます:)

私は〜に乗っています

  • レール3.2.9
  • rspec 2.12.0
  • 工夫2.2.3

どんな助けでも大歓迎です

4

2 に答える 2

1

に変更@request.env["devise.mapping"] = Devise.mapping[:user]してrequest.env["devise.mapping"] = Devise.mapping[:user]みてくださいspec/support/controller_macros.rb

于 2013-02-28T19:52:42.060 に答える
0

ここで私は自分の質問に答えています。私が尋ねた質問の回避策を見つけることができました。

以下は私が行った手順です

1)サポート ディレクトリからcontroller_macros.rbandを削除しましたdevise.rb

ControllerMacros2)からの参照を削除しましたspec_helper.rb

3) に次のコードを追加

#spec/features/documents_spec.rb
before(:each) do
   user = FactoryGirl.create(:user)
   visit root_path
   fill_in 'user_email', :with => user.email
   fill_in 'user_password', :with => user.password
   click_button 'Sign in'
end

もっとエレガントな方法があるはずだと確信しています(devise wikiで説明されているように)が、これは機能します:)

于 2013-03-01T04:31:13.740 に答える