Railstutorial学習記録9
日が空きましたが、8章をやっていきます。
やったこと
- サインイン/サインアウトの実装
- cucumberの使い方
メモ
- rspecで
-e
オプションを渡すことで、特定のテストが実行できる。これはdescribeで指定している文字列に合致するものだけ実行されるようです。(7章でも書いてましたね^^;
describe "signin" describe "with invalid information" do before { click_button "Sign in" } it { should have_title('Sign in') } it { should have_selector('div.alert.alert-error', text: 'Invalid') } end describe "after visiting another page" do before { click_link "Home" } it { should_not have_selector('div.alert.alert-error') } end end
となっている場合"signin"とすると両方のテストが、”after visiting another page"とすると リンククリック後のテストがされます。今回はネストされているので、"signin with invalid information"としてもテストが実行できました。
flashだとエラーメッセージが残留するので、flash.nowにするらしい。flashは自リクエスト+次のリクエスト終了まで残り、flash.nowは自リクエスト内でしか残らないということなのかな。redirect_toした先の画面でメッセージを表示したい場合に使うらしい。
セッション管理にSessionsHelperを使う。コントローラでincludeするだけで簡単に使える
デフォルトでは、すべてのヘルパーはビューで使用できますが、コントローラでは使用可能になっていません。Sessionsヘルパーはビューとコントローラの両方でメソッドが必要となるので、コントローラでは上のように明示的にインクルードする必要があります。
bundle exec rake db:migrate
でdb/scheme.rb(たぶん)を更新して、bundle exec rake db:test:prepare
でテストdbを更新する。取得したトークンはdbに暗号化して格納する。そしてユーザから送られてトークンを暗号化して、dbと比較することでユーザを確認する。さらにセキュアにするなら新しいセッション毎にトークンを発行する。
コールバックとは、オブジェクトのライフサイクル期間における特定の瞬間に呼び出されるメソッドのことです
- 下記のテストは同等
its(:remember_token) { should_not be_blank } it { expect(@user.remember_token).not_to be_blank }
- 要素代入関数
self.current_user = ... current_user=(...)
- ||=は変数が未定義のときに右側の式が代入される。
@user = @user || "the user" @user ||= "the user"