毎日やったことを記録していく(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の設計が変更に弱いという指摘を受けた。
一度、レビュー受けて悪いところを洗い出したいお気持ち・・・。