心はいつも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
テンプレとヘルパーの順番

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

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

5.1.2BootstrapとカスタムCSS、です。 今までdivについていたイ …

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

5章最後の演習、3問目です。 リスト5.38に示すように、元のヘルパーメソッドに …

no image
Google Appsで問い合わせフォームを作りました

とっても簡単でした。Google Appsでこのブログに問い合わせフォームを設置 …

パーフェクトRuby 3章制御構造/メソッド/組み込み関数 3-2 基本的な制御構造

p75 3-2 基本的な制御構造 条件分岐、繰り返し、ジャンプ構文について 3- …

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

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

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

10.2マイクロポストを表示する、です。 ポストの投稿ではなく、表示だけを先に作 …

no image
Mac OS Xでftp × Cyberduck

WordPressにプラグインを入れたくてダウンロードしてきました。 そういえば …

no image
RailsTutorial4.0を高速で復習する。終わりました。

作りたいサービスがあってコーディング開始していたのですが、もう1回振り返り学習し …

no image
rbenvとruby-buildのインストール

諸々のものをインストールしたら、次はHomebrewを使ってrbenvとruby …