読者です 読者をやめる 読者になる 読者になる

まりぴよこのブログ

日々の日記。技術ネタでまとまりきってないものの記録、伝わる文章の書き方を練習とか。

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

  • rails 4.2.0 (←一応これだけはGemfileで指定してあった)
  • rspec 3.1.0

以下の記載はこの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から外れていく予定なので、ダメダメな感じに育っていくリポジトリはこちらです。。

maripiyoko/recipes_index_app · GitHub