心はいつも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

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

  関連記事

no image
ブログデザイン変更しました

予告通り、本日中にブログのデザインを変更できました。WordPressのテーマT …

no image
コンビニで買った携帯充電器がUSB充電ケーブルとして使えて意外に便利だった件

ITの最大苦手項目、 充電。。。特にiPhone多様するようになって以来、ガラケ …

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

7.3ユーザー登録失敗、です。 ここでは、エラーメッセージの表示を実装します。 …

no image
iPhoneのKindleアプリでChip Conley氏の本を読んでみました。その2

iPadの発売がようやく発表されました。私個人としては読書端末としての利用を期待 …

MacBookAirの容量が足りない

当ブログairpucciで人気なのがMacBookAirに関するエントリ。ありが …

詳解 Objective-C 2.0 第3版 CHAPTER3 継承とクラス

[]多用といいメッセージキーワードといい、やっぱObjective-Cってキモチ …

no image
WindowsのiTunesからMacのiTunesへのデータ移行

MacBookAir 2日め。なかなかMacにふみきれなかったのは、Window …

no image
iPhoneの月請求は8円のみです。

昨年11月に、e-mobileからiPhoneにMNPしました。 ちょうど、乗り …

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

7.1.2ユーザーリソース、です。 /user/newを/signupで表示させ …

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

3.6高度なセットアップ、です。 この節を飛ばしても次の章以降には何の影響もあり …