RailsTutorialを Rails4.2 RSpec 3.1 で写経 --- RSpec itsを使う
RailsTutorial 3周目
何回やるんじゃ。。って感じですが・・3周目ですよ。ええ。。 (わかるまで何回でもやりますよ;;)
4.0版で再開。現在8章目です。 (Railsで独学、自分だけで新しいプロジェクト作ろう、とすると、ユーザー管理したり、まともにログイン出来るようにしようとするだけで、ほぼRailsTutorialの8割位を総ざらいした方が良いじゃん、となる)
せっかくなのでGemは最新のがどんどん入ったら良いのではないか、とRailsTutorialの中に出てくるgemをバージョン指定しないで最新入る状態で突き進んでいったら、チラホラ問題にぶつかったので、書き留めておくことにした。
3周目なので、多少Rails力(ぐぐ力)も上がったかと、多少のオリジナリティを出したがために、色々とぐぐ力を磨くことになる ww
重要なGemのバージョン
Gemfileでバージョン固定していないがために、bundle updateかけたタイミングで変わる・・ Rails初心者はこんなことしててはいけないのではないだろうか・・と不安になりつつ、 いや、むしろ初心者だからこんな怖いこと出来るのかも、と思う。
現在のプロジェクトのgem version
以下の記載はこのgem versionでの対応です。
8章 サインイン・アウト itsの登場
第8章 サインイン、サインアウト | Rails チュートリアル
ここで登場した新しいRSpecの記法でつまづく。
subject { @user } ... describe "remember_token" do before { @user.save } its(:remember_token) { should_not be_blank } end
新しく出て来たits
さん。
今まで出て来たit
と似ているが、subjectで指定されたオブジェクトじゃなくて、そいつの属性をテスト対象とする。
ちなみにit
で書いたスペックはこんな感じ。
例:ユーザーの名前が空だったら、有効ではない。というテスト
describe "when name is not present" do before { @user.name = "" } it { should_not be_valid } end
RSpec 3.1ではエラーになる
itsを含めたテストを書いてしまうと、エラーが出る。
undefined method `its' for RSpec::
どうやら、its
なんてないぞ、という状態らしい。
gemに切り出されているので、それを追加すれば良いらしい。
rspec-its
を追加。
group :development, :test do gem 'rspec-rails' gem 'rspec-its' ... end
まんまこの参考URLで解決。。 RSpec3の対応(参考:RSpec 3の重要な変更 - 有頂天Ruby) - rochefort's blog
おわり
Rails Tutorial通りに進んでいくと、ちゃんと最初にspec書くところからやってて素晴らしいな〜 もうそろそろ自分で書くところに入ってくるから、いきなりspec無くなっていきそう・・ 最初に何やりたいか考えたら、何が出来て、何が出来なければやりたいことが出来たって証明出来るのか、それがテストの言葉でどう表現出来るか考える癖つけないといけないんだろうな。。
練習中のリポジトリ
ぼちぼちtutorialから外れていく予定なので、ダメダメな感じに育っていくリポジトリはこちらです。。