Ruby on Rails Tutorial (36)
朝練メモ。昨晩の続きを。
とりあえず user_spec.rb
箇条書きで俯瞰してみます。
- 可視状態な属性の確認
- new で作ったオブジェクトが valid であり、admin ではないことを確認
- User with admin attribute set to 'true' な時は admin であることを確認
- name および email 属性がブランク値の場合は invalid になることを確認
- name の文字列長の確認
- email フォーマットの確認
- User when email address is already taken な時は invalid になることを確認
- password 関連のチェック
- password 属性がブランク値の場合は invalid になることを確認
- User when password doesn't match confirmation な時は invalid になることを確認
- password_confirmation 入力されているかを確認
- 入力文字列長のチェック
- 認証関連
- ちょっとここ、後で確認
- remember token がブランクではないことを確認
- micropost との関連
- following
最後らへんは色々と微妙。とりあえず authenticate というメソドが謎。色々確認したところでは Rails 3.1 あたりから認証のための仕組みが本体に入った模様。authenticate メソドは has_secure_password メソドの呼び出しで盛り込まれるとのこと。
写経時にテキストを全然見てない、というかコードさえも見てないことが自分で分かって色々と微妙だなぁ。
時間切れなカンジなのでとりあえずエントリ投入。続きは適宜追記ということにて。
続き
あら、認証部分の試験、不思議な記述がありますね。
describe "return value of authenticate method" do before { @user.save } let(:found_user) { User.find_by_email(@user.email) } describe "with valid password" do it { should == found_user.authenticate(@user.password) } end describe "with invalid password" do let(:user_for_invalid_password) { found_user.authenticate("invalid") } it { should_not == user_for_invalid_password } specify { user_for_invalid_password.should be_false } end end
with invalid password の方。found_user.authenticate("invalid") は false を戻すはずなので @user とは異なっているべきで、かつ false じゃないといけないのですが specify というソレははじめて見ました。元々は it ではなくて specify だったらしいというソレは昔のるびまに出てました。
あるいは remember token な試験ですが
describe "remember token" do before { @user.save } its(:remember_token) { should_not be_blank } end
となっててこれは
before_save :create_remember_token
な指定があるメソドの定義が以下で
private def create_remember_token self.remember_token = SecureRandom.urlsafe_base64 end
save した後はブランクではあり得ませんね、という確認になるのか。
次は micropost associations な確認とのことなのですが冒頭で
- created_at な順になってること
- dependent :destroy な動作確認
をしているのか。で、status なソレで何を確認しているかというと、
- unfollowed_post として follow してないユーザの micropost を作る
- User なオブジェクトを作って @user が follow してる状態にした上でそのユーザが三つ micropost を投入した状態に
これで
- @user の feed に
- newer_micropost を含む
- older_micropost を含む
- unfollowed_psot は含まない
- 新規に作った三つは含む
ということを確認しているのか。成程。つうか include って便利なメソドだな。以降で出てくる following な試験でも多用されてます。