それと同時に!!テストはshoulda、fixtureはやめてfactory_girlを使っています。完全に単なる新しい物好きの挙動です。
それぞれ使い方はgithubのドキュメント見ればわかります。authlogicはサンプルアプリが助かりました。
躓いたところがあるので補足します。
functional testを書いてたら、どうもauthlogicでログインが出来ませぬ。
最初は確かこんな感じ。最後の二つ(password_saltとcrypted_password)は、サンプルアプリのfixtureからとってきました。
$ cat test/factories.rb
Factory.define :ユーザさん, :class => User do |f|
f.username "ユーザさん"
f.email "ユーザさん@example.com"
f.password "pasuwado"
f.password_confirmation "pasuwado"
f.password_salt (salt = Authlogic::Random.hex_token)
f.crypted_password {Authlogic::CryptoProviders::Sha512.encrypt("sasasa" + salt)}
end
でも、どうもうまくいかない。Factoryで作ったsaltで暗号化されてないっぽい。何でなの?
調べてみると
it's all good, I am not using fixtures but Factories.
Factory.define :user do |u|
u.login Factory.next :login
u.password "password"
u.password_confirmation "password"
end
now it works fine.
だそうで。いいの?saltとか指定しないで?平気でした。Factoryがよろしく作ってくれました。
なので、これでOK。
$ cat test/factories.rb
Factory.define :ユーザさん, :class => User do |f|
f.username "ユーザさん"
f.email "ユーザさん@example.com"
f.password "pasuwado"
f.password_confirmation "pasuwado"
end
さらに。authlogicはユーザー(例えば。acts_as_authenticなモデル)のインスタンスを生成すると勝手にログインしてくれるので、そこも注意です。
$ cat test/functional/user_sessions_controller_test.rb
require 'test_helper'
class UserSessionsControllerTest < ActionController::TestCase
context "UserSessionsController" do
setup do
activate_authlogic
@ユーザさん = Factory.create(:ユーザさん)
UserSession.find.destroy #ログアウトしておく
end
end
No comments:
Post a Comment