Ruby on Rails開発のインターン (Day 26)

こんにちは、皆さん!

今日のフォーカスはどうやってCapybaraテストからコントローラー内のインスタンス変数にアクセスすることができるかだ。それと、今日の朝、新たなウェブサイトのベースを作らないかと相談されたので、内容の少ない比較的新しいウェブサイトを作る機会があるかもしれない。


  • トピック:
  1. コントローラーの変数を使う代わりに
  2. ChromeのディベロッパーツールのうちのNetworkというセクションを使う


  • 疑問:


  • 問題:
  1. Capybaraテストからコントローラー内のインスタンス変数にアクセスできない(代わりの方法で解決)


  • 学習した内容:
  1. ChromeディベロッパーツールのうちのNetworkを有効に使う一つの方法


  • 今後やってみたいこと:


  • リソース:
  1. ruby on rails - 'assigns' method not found in rspec capybara - Stack Overflow


コントローラーの変数を使う代わりに

この代わりとなる方法はどこかアホっぽいけど、どりあえず、問題を解決してくれる。
僕がやったことはとても基本的なことで、テストコードを書いているファイル、つまり、specファイルがルビーファイルであること。これって、つまり、コントローラーでやれることと同じことができる。だから、下記のようにマーカーを取り出すというコードに変更した。

@places = Place.all

なんとなく、面白く感じるのはこんな基本的なことに気づくまでに2,3日かかったってこと。もっと視界を広く持つべきだね。

以前、ブログで出したコントローラー内のインスタンス変数をアクセスするジェムはRails 5から消されたようだ。StackOverflowでその内容に言及したものがあった(英語版)。

Testing what instance variables are set by your controller is a bad idea. That's grossly overstepping the boundaries of what the test should know about. You can test what cookies are set, what HTTP code is returned, how the view looks, or what mutations happened to the DB, but testing the innards of the controller is just not a good idea.
- David Heinemeier Hansson

簡単に言うと、コントローラー内の変数にアクセスできるということはテストがしていいことの範囲を超えるそうだ。テストというのはそもそも決められたデータをテストするためにあるのであって、それに対する特定の値の一致が求められているのだ。

テストが何をし、どうやって機能しているのかを見直すいいチャンスだったと思う。こうやって、たまには基本に戻るべきだね。

ChromeディベロッパーツールのうちのNetworkというセクションを使う

これは僕のマネージャーが見せてくれたHTTPリクエストの種類をブラウザで確認する方法

彼はChromeディベロッパーツールを開いて、Networkというセクションを開いて、Networkセクションの真下にあるPreserve logというものをクリックした。
そして、彼はウェブサイトをリロードして、そのツール上で下記のような内容のものが出てきた。

f:id:Coding_Studio:20180811081947p:plain

これはどのページがどのHTTPリクエストでプロセスされたのか教えてくれるため、エラーがどこにあるか見つけるときに役立つ。
そして、そのリンクにクリックすると、HTTPリクエストの詳細を表示してくれる。

f:id:Coding_Studio:20180811082403p:plain

これのおかげで、無事エラーがどこで発生しているかわかり、今のサイトがPOSTリクエストを出したが、失敗したのが分かった。つまり、これでこのサイトが定義されていない"/groups"というPOSTリクエストをしようとしたことが分かる。

まとめ

久しぶりに確かに何かを学んだなと感じる一日だった。Chromeディベロッパーツールを軽く掘り下げたのがきっかけに僕はもうちょっとディベロッパーツールについて学んでみたいなと思った。このトピックに関してはかなり奥深いものがあるのではないかと踏んでいる。
毎日何がしたいのかというリストなどを作り、日々しっかり管理する必要がある気がする。じゃないと、やりたいことが多すぎて、結局大事な次のものが始めれなくなっちゃう気がする。よい管理方法を見つけれるといいな。


ご精読ありがとうございました。では、また次回まで✌



Day 27はこちら↓↓
programming-shop.hatenablog.com


Day 25はこちら↓↓
programming-shop.hatenablog.com