心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。5.3.4章。

      2014/01/25


5.3.4RSpecを洗練させる、です。

確かに、名前付きルートに書き換えていて、同じ文章が多いな、と思いました。こればかりは、 RSpecの記法を知らないと書けません!RSpecはものすごく勉強したい。いまはRailsTutorialで説明されている範囲でやっていきます。

beforeを使用する

it “ほにゃらら” do
 テスト文
end
構文のなかにvisit root_pathがあるものが3つあります。これをひとまとめにして
before { visit root_path }
と書ける。
こうすることで、「まず root_path にアクセスし、その後テスト文をおこなう」という意味になる。

describe “Homeページのテスト” do
end内だけやってみます。

現在の内容は、

describe “Homeページのテスト” do
it “コンテンツに’Twili’という文字がある” do
visit root_path
expect(page).to have_content(‘Twili’)
end
it “トップページのタイトル(サブタイトルがない)” do
visit root_path
expect(page).to have_title(“#{base_title} “)
end
it “カスタマイズしたページのタイトル(タイトルにHomeがない)” do
visit root_path
expect(page).not_to have_title(‘| Home’)
end
end

これをbefore { visit root_path }を使って書き換え。

  describe "Homeページのテスト" do
    before { visit root_path }
    it "コンテンツに'Twili'という文字がある" do
      expect(page).to have_content('Twili')
    end
    it "トップページのタイトル(サブタイトルがない)" do
      expect(page).to have_title("#{base_title} ")
    end 
    it "カスタマイズしたページのタイトル(タイトルにHomeがない)" do
      expect(page).not_to have_title('| Home')
    end 
  end

もしかしたら、これでも十分わかりやすいかも。

subject{}を使う

テストは全部pageに関することなので、
 subject { page }
とまとめることができる、とのこと。そうすることで、次は、

 it “テストの説明文” do
 end
と、その中身は結局同じ内容なので、例えば、

it “コンテンツに’Twili’という文字がある” do
expect(page).to have_content(‘Twili’)
end

は、
it { should have_content(‘Twili’) }と書けるとのこと。ここで””の中を日本語にしたのがなんだかムダになってしまった。。仕様っぽくてよかったのにな。

subject { page }を使ってまとめると、

 subject { page }
  describe "Homeページのテスト" do
    before { visit root_path }
    it {should have_content('Twili')} #"コンテンツに'Twili'という文字がある"
    it {should have_title("#{base_title} ")} #"トップページのタイトル(サブタイトルがない)" 
    it {should_not have_title('| Home')} #"カスタマイズしたページのタイトル(タイトルにHomeがない)" 
  end

subject { page }と記述したことにより、shouldの呼び出しは自動的に、Capybara (3.2.1)により提供されるpage変数を使用します。

とのこと。

この後、リファクタリングは、full_titleメソッドを持つRSpecユーティリティ用ファイルを設定し、続きますが、titleに関しては3章の演習で
let(:base_title) { “Ruby on Rails Tutorial Sample App” }
でまとめたし、
ユーティリティ用ファイルまで作るのはやりすぎな感じがするので、リファクタリングは
beforeとsubject使う段階でいったん終わらせます。

require 'spec_helper'

describe "静的ページのテスト" do

  subject { page } 
  let(:base_title) { "Ruby on Rails Tutorial Sample App" }

  describe "Homeページのテスト" do
    before { visit root_path }
    #コンテンツに'Twili'という文字がある" 
    it {should have_content('Twili')}
    #"トップページのタイトル(サブタイトルがない)" 
    it {should have_title("#{base_title} ")}
    #"カスタマイズしたページのタイトル(タイトルにHomeがない)"
    it {should_not have_title('| Home')}
  end

  describe "Helpページのテスト" do
    before { visit help_path }
    #"コンテンツに'Help'という文字がある"
    it {should have_content('Help')}
    #"サブタイトルに'Help'という文字がある" 
    it {should have_title("#{base_title} | Help")}
  end

  describe "Aboutページのテスト" do
    before { visit about_path }
    #コンテンツに'About Us'という文字がある" 
    it {should have_content('About Us')}
    #"サブタイトルに'About Us'という文字がある"
    it {should have_title("#{base_title} | About Us")}
  end

  describe "Contactページのテスト" do
    before { visit contact_path }
    #コンテンツに'Contact'という文字がある"
    it {should have_content('Contact')}
    #"タイトルに'Contact'という文字がある"
    it {should have_title("#{base_title} | Contact")}
  end
end

さて、テストコードのリファクタリング、見やすくわかりやすくなったでしょうか?なっていなければリファクタリングする価値はありません。
実際souldはわかりづらい、直感的じゃない、という意見もあって、やめておくべきというべきという意見を聞いた事があります。どうでしょう?

テスト実行すると、

bundle exec rspec spec/requests/static_pages_spec.rb

9 examples, 0 failuresでした。

いったんコミットしておきます。
次は、
5.4ユーザー登録: 最初のステップ
です。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

初めてのRuby2章 2.2ハッシュ

ハッシュ ハッシュとは、オブジェクトにキーを対応させたもの。 C++,Javaで …

パーフェクトRuby 2章Rubyの基礎 2-1 Hello,Ruby

12章から5章まではPart2 Ruby言語仕様 です。 2章 Rubyの基礎 …

no image
retweetボタンを追加してみました

最近いろんなブログで見かけるretweetボタン。ブログのエントリーについている …

iOS developerプログラムに登録しました

iPhoneアプリを初めてリリースしたのは2010年7月です確か。 デベロッパー …

no image
RailsTutorial4.0を高速で復習する。5.1.2章の途中から。

5.1.2章の途中、 リスト5.6 すべてのページに適用される共通のスタイルをC …

no image
電源が入らない!MacBookAirが真っ黒になりました。

iPhoneを買ったばかりの頃、iPhoneのメーラーを立ち上げても中身が表示さ …

iPhoneアプリ開発のお勉強方法です。

Objective-C苦節3ヶ月アプリ作れるようになったと書きましたが、本日アプ …

no image
RailsTutorial4.0を高速で復習する。6.5章。

演習1問目。 リスト6.20の、メールアドレスを小文字に変換するコードに対するテ …

カスペルスキーを使っています

PCのウィルススキャンは、多くの人が使っているかと思います。 大手3社のソフトを …

no image
RailsTutorial4.0を高速で復習する。8.2.1章。途中から。

Railsのセキュリティに納得がいかず3日ほど低速です。とりあえず進めています。 …