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

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

  関連記事

WordPressの管理画面真っ白問題に対処しました

WordPressの自作テンプレを作ったはいいものの、管理画面が真っ白になって投 …

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

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

no image
電子雑誌を買いました

GWの計画を立てているとき、行きたい場所を検索をすると、HANAKO WESTの …

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

7.6演習 1問目です。 リスト7.30のコードを使用して、7.1.4で定義され …

パーフェクトRuby 1章Rubyの概要

メタプログラミングRubyもいいのですが、余計な物語仕立てがどうも性に合わず、消 …

吉瀬美智子さんが美しすぎて、新サイト作りました

以前からやりたいと思っていたのですが、吉瀬美智子さんが美しすぎてやる気がでました …

RailsGirls松江からのぉ〜東京More!*既に2回目

RailsGirls東京3回目に申し込みそびれた流れから松江に参加し、チューター …

no image
formatはどこから取ってくる?

ruby on rails3プリケーションプログラミングの本の内容をruby2. …

HerokuにRailsアプリをdeployする

Railsプロジェクトというよりも、Railsアプリっていうほうが正んでしょうか …

no image
あんたのrakeは新しいけど古いのが必要なんだよっ!!と怒られた

Mavericksってrubyが2.0になったんですね。 てのはおいといて、 r …