Railsチュートリアル2周目。
RSpecの勉強も始めた。
テストを実行したところテスト結果がREDになる。
Failures:
1) FoodEnquete 入力項目の有無 必須入力であること お名前が必須であること
Failure/Error: expect(new_enquete.errors[:name]).to include(I18n.t('errors.message.blank'))
expected ["を入力してください"] to include "translation missing: ja.errors.message.blank"
# ./spec/models/food_enquete_spec.rb:42:in `block (4 levels) in <top (required)>'
下記の文を追加したところテスト結果がGREENになった。
rspec-testcode-sample/2章/config/locales/views.ja.yml
errors:
message:
blank: "を入力してください"
下記のサイトを参考に対処したが、deviseとは何だろう。
自分の環境にはdeviseもrails-i18nも入っていないと思うが、どう実装されているのかわからない。
https://poinorou.hatenablog.com/entry/2019/09/16/090336
演習14.2で期待したエラーが生じなかった。
原因:Guardfileの設定を忘れていた。保存するファイルによって実行するテストが違うことに気づかなかった。
memberメソッドを使うとURLにはidが含まれる。
idを含めたくない場合、collectionメソッドを代わりに使う。
下記のようにテストを書いていたが、count.to_sと書かないと期待通りにテストされない。
assert_match followers.count, response.body
13.4.3 画像のリサイズ
アップロードされた画像を表示する前にサイズを変更するが、
テストでは画像のリサイズを行わないようにする。
config/initializersディレクトリ下にはアプリ起動時に実行される。
参考:https://teratail.com/questions/63578
リスト13/59でmicropost.rbに「mount_uploader :picture, PictureUploader」を追記し、
チュートリアル通りにテスト結果がGREENになることを期待していた。
しかし、テスト結果にエラー「NoMethodError: undefined method `picture_will_change!'」と出る。
rails g migrationと入力するべきところをmigrationの部分を入力し忘れていた。
出力結果に「Could not find generator 'add_picture_to_microposts'. 」と出ていたのを確認していなかった。
参考:https://teratail.com/questions/215421
ログインしていない場合にマイクロポストが操作できないことをテストで確認。
Usersコントローラではlogged_in_userを使っていたが、このメソッドをMicropostsコントローラからも扱いたいのでメソッドの定義を移動させる。
マイクロポストを全件表示すると件数と処理時間の面で問題がある。
10章と同様にwill_paginateメソッドを使い、ページで分割して表示する。
10章と異なる点としてwill_paginateに渡す引数がある。
Usersコントローラにおいて、@users変数が存在していれば引数は不要。
本節ではUsersコントローラにおいて、@microposts変数を明示的に渡す。
Herokuにデプロイ後、メールが送信されることを試そうとした。
結果はエラー "Authentication failed: account disabled"
HerokuかSendgridに問い合わせると良さそうだが、この対処は後回しにする。
演習2の「redirect_to root_url and return unless FILL_IN」が分からなかったので下記のリンク先で勉強した。
素人による "and return unless"
CGI.escapteすると半角スペースは%20になると予想していたが、予想に反して+が返って来た。
Content-Typeにapplication/x-www-form-urlencodedを指定した場合、+として表さないといけないらしい。
参考:
- https://qiita.com/YamKenta/items/76bd5596bdcd59eceaf3
- https://developer.mozilla.org/ja/docs/Web/HTTP/Methods/POST
development環境の設定値を変えたが、何に関する設定をしているのか調べた。
railsガイドを参考に下記のことがわかった
- raise_delivery_errors=true
- メール配信に失敗した場合にエラーを発生させる
- delivery_method = :test
- メールを配列ActionMailer::Base.deliveriesに保存する。