Gs9gxzlm

2017-04-20 yklitterCreated on 2017-04-21 by yklitter

    本日のスコア

    Rails

    • RSpec書いたり悩んだりしていた
      • webmock、結局使わないで解決したので、昨日の時間が結構無駄になってしまった。もったいない
        • 外部APIを叩くモデルのインスタンスメソッドは無条件にtrueを返却するというモックを作った
        • allow_any_instance_of(Object).to receive(:method).and_return(true)と書くことで、このSpecでテストするコードにおいてObjectインスタンスのmethodメソッドを呼ぶ処理が実行された場合はtrueが戻り値として返されるというモックになった
        • allow_any_instance_ofは使用が推奨されておらず、これを利用するときは設計を見直したほうがいいということが書いてあった。
      • ControllerでMailerを使ってメールを送信する処理があり、メール送信自体はdeliver_laterを使った非同期処理だった
        • 実際の実行ではSidekiqを利用してジョブを管理するが、テストにおいてどうやってSidekiqを利用すればいいのか分からなかった
        • Sidekiqのwikirspec-sidekiqのREADMEを読んだりしたのだが、結局分からなかった。これは自分の能力の低さが問題で、キャッチアップに時間がかかりすぎた。
        • deliver_laterではなくdeliver_nowだと通るということが分かったところで、先輩からstackoverflowの記事を教えてもらった
        • 上記の記事の中で、specにおいてはdeliver_laterをdeliver_nowでラップするという荒業があったので、試しにやってみたらテスト通った。
        • 本来はよくない応急処置のような感じになってしまったので、知見を貯めてより良い書き方ができるようになりたい
    • ActiveRecordの関連付けで今日初めて知った知見
      • ActiveRecordの関連付け(一対多や多対多など)において、関連付けようとする二つのモデルのうち、片方には関連付けを書かなくても正常に動作することを初めて知った
      • Aモデルにbelongs_to :bと書いて、Bモデルには何も書かなくても、関連付けとしては正常に動作する
        • Bがhas_many :aだろうとhas_one :aだろうと、Aモデルにはb_idというカラムが追加される。has_manyとhas_oneの違いは、Bモデルに関連付くカラムが一つか複数かだけの違いなので、書かなくてもシステム的には問題ないということだろう。
        • ただし、可読性という意味でも、関連付く二つのモデルがあれば、両方に関連付けを明記しておくべき
      • というのを @Biacco42 さんと @r7kamura さんにTwitterで教えてもらった。とても勉強になる。

    その他

    • 成長曲線が緩やか過ぎる自覚がある。最近だらけすぎている