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

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

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

   


3.2章は最初のテストです。

Railsチュートリアルは、アプリケーションの振る舞いをテストしながら実装する直観的な手法を採用しています。この開発手法は、テスト駆動開発 (Test-Driven Develpment, TDD) から派生した振舞駆動開発 (Behavior-Driven Development, BDD) として知られています。

だそうです。そうだったんだ。

結合テスト (RSpec では リクエストspec と呼んでいます) は、ユーザーがアプリケーションを使う際の一連のアクションをシミュレーションします。結合テストは、アプリケーションの各ページが正常に動作するかどうかをテストしてくれる強力なツールです。

そうだったんだ。unit testしか無いように思えたけど、高速復習で確認していきます。

実装の前にテストを書くというのがハードル高くなってますけど、結構当たり前になっているようなので、頑張りましょう。とってもいい事です。

homeページに対するテスト

3.2.1テスト駆動開発です。まずは homeページに対するテスト。これが結合テスト (request spec) らしい。そうだったのか。私の理解している結合テストよりだいぶ粒度が細かい。機能が小さいからかな。

で、試験票といいますか、試験スクリプトといいますか、それを生成します。

rails g integration_test static_pages

すると、spec/requests/static_pages_spec.rbができます。
homeページのテストから書き始める。Sample_AppじゃなくてTwiliにしたので、「リスト3.9 Homeページの内容をテストするコード。」を以下のようにmodify。

require 'spec_helper'

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

  describe "Homeページのテスト" do

    it "コンテンツに'Twili'という文字がある" do
      visit '/static_pages/home'
      expect(page).to have_content('Twili')
    end
  end
end

it “コンテンツに’Twili’という文字がある” doと
expect(page).to have_content(‘Twili’)が要は同じ事をいっているんですね。
(こういうテストが実際に必要かはおいておきます。)
RSpec はダブルクォート (“) で囲まれた文字列を無視するとのことで、日本語コメントとして書いた方がわかりやすいと思う。さらに、テストを書く前の要求事項を箇条書きしておくのもいいと思ってる。
visit ‘/static_pages/home’のvistはCapybaraさん機能だそうです。ブラウザでの/static_pages/homeURLへのアクセスをシミュレーションするとのこと。

Capybara DSLをRSpecヘルパーファイルに追加

リスト3.10Capybara DSLをRSpecヘルパーファイルに追加する、です。
spec/spec_helper.rb

RSpec.configure do |config|
 #このdo分のなかに色々あるので、次の一文を追加する。
  .
  .
  .
  config.include Capybara::DSL
end

リスト3.10は3.6章と一緒に、最初にやっておくのもいいかも。

静的ページのテストを実行する

bundle exec rspec spec/requests/static_pages_spec.rb

で実行。テストは失敗します。なんで?と思ったら”Twili”の文字があるのはtitleで、コンテンツにはまだないんですね。でも、まあテストは動きました。

コンテンツに’Twili’という文字があるをpassさせるようにhomeページを変更

リスト3.11 テストにパスするHomeページ用コード。です。”コンテンツに’Twili’という文字がある”という要求は正しいので、passするように静的ページのほうを修正します。viewに修正を入れます。
app/views/static_pages/home.html.erb

<h1>Twiliサービスへようこそ</h1>
<p>
    This is the home page for the
  <a href="http://railstutorial.jp/">Ruby on Rails Tutorial</a>
    sample application.
</p>

h1に日本語とまぜてみました。

静的ページのテストを再度実行する

bundle exec rspec spec/requests/static_pages_spec.rb

viewを修正したので、今度はpassしました。
これで、
“コンテンツに’Twili’という文字がある” という要求を満たす開発は達成しました。バンザーイ。

helpページに対するテスト

静的ページはhomeの他にhelpも作成してあるので、同じようにテストを書きます。

リスト3.12 Helpページの内容をテストするコードを追加する。です。
spec/requests/static_pages_spec.rb
同じようにhelpのテストコードを追加していきます。

require 'spec_helper'

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

  describe "Homeページのテスト" do
    it "コンテンツに'Twili'という文字がある" do
      visit '/static_pages/home'
      expect(page).to have_content('Twili')
    end
  end

  describe "Helpページのテスト" do

    it "コンテンツに'Help'という文字がある" do
      visit '/static_pages/help'
      expect(page).to have_content('Help')
    end
  end
end

分量増えました。

静的ページのテストを実行する

bundle exec rspec spec/requests/static_pages_spec.rb

で実行。テストは失敗します。
1) 静的ページのテスト Helpページのテスト コンテンツに’Help’という文字がある
という失敗メッッセージが出ました。

2 examples, 1 failureなので、homeページのテストはPassしています。

テストpassするようにhelpページを変更

homeページを修正しあときと同様、helpページも修正します。viewに修正を入れます。
リスト3.13 テストにパスする、Helpページ用のコード。です。
app/views/static_pages/help.html.erb

<h1>Help</h1>
<p>
  Get help on the Ruby on Rails Tutorial at the
  <a href="http://railstutorial.jp/help">Rails Tutorial help page</a>.
  To get help on this sample app, see the
  <a href="http://railstutorial.jp/book">Rails Tutorial book</a>.
</p>

RailsTutorialと同じ内容にしました。

静的ページのテストを再度実行する

bundle exec rspec spec/requests/static_pages_spec.rb

helpのviewも修正したのでpassしました。2 examples, 0 failuresとなりました。

長くなったので、続きます。
次は「3.2.2ページの追加」からです。

RailsTutorialにはありませんが、いったんcommitしてもよいかも。

 - テクニカル ,

Message

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

  関連記事

Google Webfont使ってみたよ

地元に戻ってきてまず思ったのは「観光サイトを立ち上げたい」ということ。いや、観光 …

no image
RailsGirlsMore!でRailsTutorialのキモチワルイところがスッキリしました

RailsGirls松江からのぉ〜東京More!*既に2回目から1ヶ月半。またま …

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

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

no image
Gitをインストールする

Rails開発がしたいのですが、今後必要になるでしょうからGitをインストールし …

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

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

no image
Homebrewをインストールする。

MacOS 10.8.5(Mountain Lion)にRuby&Ru …

コンビニで切れないiPhone充電ケーブル買った

iPhone充電に使うライトニングケーブルって高いのに切れ易く涙目。 こんな感じ …

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

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

no image
テンプレとヘルパーの順番

http://yourdomain/actionxを呼んだときのactionx用 …

no image
RailsTutorial4.0を高速で復習する。5.6章。演習1問目。

5.6演習です。 一問目。 リスト5.28の静的ページのテストコードは簡潔ですが …