私はTDDの新機能ですので、わかっていれば分かりますが、DeviseとOmniauthを使って開発中に完全に動作するログインシステムを持っています。何らかの理由でrspecテストを実行すると失敗します。dev_sign_in_and_redirectがrspecテストを失敗させます
場合、私は、私が実際に
Failure/Error: get :create
NoMethodError:
undefined method `user' for nil:NilClass
# ./app/controllers/authentications_controller.rb:13:in `create'
を取得し、テストを実行すると、このRSpecのテスト
describe "GET 'create'" do
before(:each) do
request.env['omniauth.auth'] = { "provider" => "facebook", "uid" => "1298732", "info" => { "first_name" => "My", "last_name" => "Name", "email" => "[email protected]" } }
end
it "should create a user" do
lambda do
get :create
end.should change(User, :count).by(1)
end
end
と私の認証コントローラ
class AuthenticationsController < ApplicationController
def create
omniauth = request.env['omniauth.auth']
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
flash[:notice] = "Signed in successfully"
sign_in_and_redirect(:user, authentication.user)
else
user = User.find_by_email(omniauth['info']['email']) || User.new(:email => omniauth['info']['email'], :fname => omniauth['info']['first_name'], :lname => omniauth['info']['last_name'])
user.authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])
if user.save :validate => false
flash[:notice] = "Login successful"
sign_in_and_redirect(:user, user)
else
flash[:notice] = "Login failed"
redirect_to root_path
end
end
end
end
のためのアクションを作成してテストしています私はsign_in_and_redirectステートメントを削除し、テストに合格します。興味深いことに、sign_in_and_redirectの代わりにsign_inを使用すると失敗します。
なぜこのようなことが起こるのでしょうか。特に開発時に自分自身でアカウントを作成すると、正常に動作します。
ありがとうございました!あなたは工夫のユーティリティメソッドのいずれかを使用している場合
私は自分を解くかなり確信して問題。 どうやら、テスト中に考案のsign_inメソッドを使用するためにあなたが呼び出しを行う必要があります。 が考案:: TestHelpersそれを含めた後 含め、私の問題は去っていきました、とすべてが正常に機能しているようです。 –