コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Ruby以外の言語を学んで来た人が、初めてRailsでrspecを書く前におさえておくと幸せになれるかもしれない話。

『view以外はrspecでテスト書かないとマージさせません』となって初めてrspecをかかざるをえない状況(仮)の人がいたら教えてあげたいエッセンス的な雑記

抑えておいてほしい知識

  • 文法
  • 大まかなグループの使い分け
  • 純然たるrspecの機能とそうでないものの見分け

文法

一番ベストはEveryday Rails - RSpecによるRailsテスト入門を読んでもらうのが体系的にもRailsのお作法的にも嬉しい。

そうでなければはJunichi Itoさんのrspecシリーズ記事を読んでもらうのがベスト

大まかなグループの使い分け

文法に近い部分になるんですけど、describe とか it の使い分けの部分、特に実行時の制約がないから普通に適当に書いてもかけてしまう。お手本のコードがあまりポリシーがなかったりすると新しく参加した人はさらに混乱するので基礎的な使い方は理解したい。

ここらへんはEveryday Railsを読んでれば理解できる部分ではあるが、読んでない場合に最低限抑える場合は下記記事などがおすすめ

純然たるrspecの機能とそうでないものの見分け

これはどういうことかと言うと『factory bot』の記述や『rails_helper.rb』などに書かれたプロジェクトごとの独自拡張のこと。

例を出すと

let(:user) { create(:user,:email_user,age:24) }

などは create があまりにも自然に出てくるのでFactoryBot.create であるというのも知らずにrspecの標準機能であると 自分は最初勘違いしたし、他にもそうやって勘違いしている人を数名見た

そのためfactory botを利用している場合は使い方をさらっと見ておくといいし、helperクラスの記述は見ておくと良いし、教える側に立った際は一言添えておくと良いかもしれない。

参考としては以下のようなページがある(どれも旧称のFactoryGirl名義)

進んでもらうときの考え方

サヨナラBetter Specs!? 雑で気楽なRSpecのススメ - Qiita』にも書かれているのですが、ちゃんと書こうとすればするほど、便利記述を使い始めるのでマッピングがよくわからなくなってきます。

なので

  • 最初はわかりやすいようなSimpleな記述で書いている
  • matchaは expect().to eq() のようなイコールとするものを基本として、あんまり便利なものを使おうとは考えずに書いてみる
  • 日本語が母国語のエンジニアしかいなければdescribeやcontextなどの部分に無理に英語は使わない。テストは理解しやすいほうに倒したほうがよい

というように愚直に平易な書き方で書いて、自身がスキルアップして冗長さを感じてきたら自分なりのやり方で洗練できればいいのかなと思っています。