--preface:必要ならば無視してください。
私はレールを初めて使い、ユーザー認証が必要なプロジェクトに取り組んでいます。 私はthis tutorialを見つけ、それを通って何が起こっているのかを理解しようとしてきました。もちろん、それはまさに私が必要としているものではありませんので、私は順番に変更しています。このチュートリアルは一部の分野では古くなっているので、もちろん私のコードを更新しなければなりません。私の問題の一部は、バグが修正に含まれているのか、非難されている機能なのか、何がわからないのかということです。レールユーザ認証のコントローラテストに失敗しました
- 質問
これは失敗する(最も単純な)テストです。 (最初のassert文の "ゼロではないと予想される"。)
def test_authentication
#check we can log in
post :login, :user => { :username => "bob", :password => "test" }
assert_not_nil session[:user_id]
assert_equal users(:bob).id, session[:user_id]
assert_response :redirect
assert_redirected_to :action => 'welcome'
end
それはuser_controllerアクションログインを呼び出す:ユーザーメソッドの認証を呼び出す
def login
if request.post?
if session[:user_id] = User.authenticate(params[:user][:username], params[:user][:password])
flash[:message] = "Login succeeded!"
redirect_to_stored
else
flash[:warning] = "Login failed."
end
end
end
を。
def test_registration
#check that we can register and are logged in automatically
post :register, :user => { :username => "newuser", :password => "pass", :password_confirmation => "pass", :email => "[email protected]" }
assert_response :redirect
assert_not_nil session[:user_id]
assert_redirected_to :action => 'welcome'
end
正常に認証を呼び出す
def register
@user = User.new(params[:user])
if request.post?
if @user.save
session[:user_id] = User.authenticate(@user.username, @user.password)
flash[:message] = "Registration succeeded"
redirect_to :action => 'welcome'
end
else
flash[:warning] = "Registration failed"
end
end
user_controllerのアクションレジスタを呼び出す:私は合格しない単一のテストを持っているので、私は、しかし、その認証が正常に動作します知っています。
ユーザーは、固定具1つの関連レコードを持って:
bob:
username: bob
email: [email protected]
hashed_password: 77a0d943cdbace52716a9ef9fae12e45e2788d39 # test
salt: 1000
私は、ハッシュされたパスワードと塩をテストしてみた - 「テスト」は、正しいパスワードです。私は、
または一部をログインアクションのパラメータにアクセスしていますどのように私のポスト要求、
を送っていますか
:
は、だから私の分析によって、バグが3ヶ所のいずれかであることを持っています固定具装填の態様。
(元々、チュートリアルのコードを使用して明示的にフィクスチャをロードしていましたが(self.use_instantiated_fixtures = true;フィクスチャ:users)、テスト前にすべてのフィクスチャが自動的にロードされるので、 t変更するもの)
もちろん、私はこれらの分野で問題を見つけることができないので、他の場所にも同様に存在する可能性があります。
私はそれを逃したとは思えませんが、それは実際にフィルタでした。もともとlog_inという関数に名前をつけていましたが、審美的な理由からloginという名前に変更されましたが、フィルタの例外は決して更新されませんでした。 ありがとうございます! – dorr