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

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

  関連記事

no image
Macでアプリを強制終了

Macでアプリを強制終了したことは今までなかったのですが、どうにもftpソフトの …

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

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

アイキャッチ画像のリサイズ

768 × 1024 pxの写真をアイキャッチに指定して、150pxにリサイズ表 …

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

5.4ユーザー登録: 最初のステップ、です。ようやく開発っぽくなってきます。 5 …

no image
Rails 3.2と4.0、複数バージョンをインストールする

Rubyを複数バージョン入れて切り替えて使える事を確認しました。次はRailsを …

メタプログラミングRuby第1章

初めてのRuby2章と8章をやったところで、メタプログラミングRubyに進みます …

no image
MavericksアップデートしRuby2.0+Rails4.0.2にversion upする

何を今さら感ですが、MacはAirとMiniの2台持ちです。Airのほうを人柱と …

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

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

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

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

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

3.3.2タイトルのテストをパスさせる。です。 ひとまず、静的ページをhtmlの …