学習記録

2020-02-09に作成

個人用の学習記録。成果がなくとも毎日更新。

所有者限定モードのためこのボードには投稿できません ボードとは?

Railsチュートリアル2周目。
RSpecの勉強も始めた。

【Rails】はじめての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


Railsチュートリアル勉強中

14.2.6 フォローをテストする

つまずいた点

演習14.2で期待したエラーが生じなかった。
原因:Guardfileの設定を忘れていた。保存するファイルによって実行するテストが違うことに気づかなかった。


Railsチュートリアル勉強中

14.2.2 統計と [Follow] フォーム

memberメソッドを使うとURLにはidが含まれる。
idを含めたくない場合、collectionメソッドを代わりに使う。

つまずいた点

下記のようにテストを書いていたが、count.to_sと書かないと期待通りにテストされない。

assert_match followers.count, response.body

Railsチュートリアル勉強中

13.4.3 画像のリサイズ
アップロードされた画像を表示する前にサイズを変更するが、
テストでは画像のリサイズを行わないようにする。

調べたこと

config/initializersディレクトリ下にはアプリ起動時に実行される。
参考:https://teratail.com/questions/63578


Railsチュートリアル勉強中

13.4.1 基本的な画像アップロード

つまずいた点

症状

リスト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


Railsチュートリアル勉強中

13.3.1 マイクロポストのアクセス制御

ログインしていない場合にマイクロポストが操作できないことをテストで確認。
Usersコントローラではlogged_in_userを使っていたが、このメソッドをMicropostsコントローラからも扱いたいのでメソッドの定義を移動させる。

つまずいた点

  • rails routesコマンドでdestroyへのパスを確認しようとしたが、現れない。原因はroutes.rbにtypoがあったから。(destroyでなくdestoryと書いていた。)

Railsチュートリアル勉強中

13.2.1 マイクロポストの描画

マイクロポストを全件表示すると件数と処理時間の面で問題がある。
10章と同様にwill_paginateメソッドを使い、ページで分割して表示する。
10章と異なる点としてwill_paginateに渡す引数がある。
Usersコントローラにおいて、@users変数が存在していれば引数は不要。
本節ではUsersコントローラにおいて、@microposts変数を明示的に渡す。


Railsチュートリアルを勉強中

11.4 本番環境でのメール送信

つまずいた点

Herokuにデプロイ後、メールが送信されることを試そうとした。
結果はエラー "Authentication failed: account disabled"
HerokuかSendgridに問い合わせると良さそうだが、この対処は後回しにする。


Railsチュートリアル勉強中

11.3.3 有効化のテストとリファクタリング

演習2の「redirect_to root_url and return unless FILL_IN」が分からなかったので下記のリンク先で勉強した。
素人による "and return unless"


Railsチュートリアルの勉強中

気づいたこと

11.2 アカウント有効化のメール送信

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

調べたこと

11.2.2 送信メールのプレビュー

development環境の設定値を変えたが、何に関する設定をしているのか調べた。
railsガイドを参考に下記のことがわかった
- raise_delivery_errors=true
- メール配信に失敗した場合にエラーを発生させる
- delivery_method = :test
- メールを配列ActionMailer::Base.deliveriesに保存する。