毎日やったことを記録していく(2019/7/24 108日目)

今日やったこと

英語

TOEIC® L&R テスト 文法問題 でる1000問
  • 回答数:15問
iKnow
  • 新規:0個
  • 復習:50個
スタディサプリENGLISH
  • クイックワードクイズ:1サブセクション

開発

danime-nico-tools

コミュニティ

Kobe.rb
  • danime-nico-toolsの開発

知ったこと

継承

継承は一軸しか扱えないので軸が増えると破綻する設計になってしまう。
特にrubyの継承は他の言語と比較して弱いので、採用するかは慎重になったほうがいい。

RSpecのlet

あくまで変数に入れているのと同じだということを忘れてはいけない。
呼び出された際に一度だけブロック内を実行する。
メソッドを呼ぶためのショートハンドとして便利に利用していると痛い目を見ることがある。
下記はそのサンプルコード。

let(:client) { APIClient.instance }
let(:response) { client.response } # responseはclientのインスタンス変数
let(:refresh) { client.refresh } # APIClient#clientはclientの@responseにnilを代入する

it 'clientの@responseがnilに更新される' do
  expect(refresh).to change { client.response.nil? }.from(false).to(true) #<= 失敗する
end

letで定義されたresponseの参照先はAPIClient#refreshが実行される以前に@responseに代入されていたオブジェクト。
つまり@responseの状態が変更されれば - let(:rsponse) => 変更前のオブジェクト - client.response => nil となりテストが失敗する。

感想等

レビューしてもらいたい

今のdanime-nico-toolsの設計が変更に弱いという指摘を受けた。
一度、レビュー受けて悪いところを洗い出したいお気持ち・・・。