統合テストと rak
2008/12/22
前回までで、asagao の単体テストと機能テストが全て通りました。
今回は、統合テストを通しましょう。
> rake test:integration (省略) 1) Failure: test_linked(InnerLinksTest) [./test/integration/inner_links_test.rb:22:in `visit' ./test/integration/inner_links_test.rb:28:in `visit' ./test/integration/inner_links_test.rb:25:in `each' ./test/integration/inner_links_test.rb:25:in `visit' ./test/integration/inner_links_test.rb:13:in `test_linked' /usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `__send__' /usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:60:in `run' /usr/lib/ruby/gems/1.8/gems/actionpack-2.2.2/lib/action_controller/integration.rb:597:in `run']: A wrong or broken path </account/show> was found within the page </>. Expected response to be a <:success>, but was <404> 2 tests, 37 assertions, 1 failures, 0 errors rake aborted! Command failed with status (1): [/usr/bin/ruby -Ilib:test "/usr/lib/ruby/ge...] (See full trace by running task with --trace)
この連載を追いかけてきた方にとっては簡単ですね。
シングルトン・リソースで説明したように、Rails 2.0 からコントローラ名の規約が少し変わったことが原因です。
エラーメッセージには「トップページに /account/show
へのリンクがあるけど、これは間違っているか壊れている」と書いてあります。
ただし、このパスがトップページのどこに現れるのかは分かりません。
どうやって調べるといいでしょうか。
普通は、アプリケーションを起動して、ブラウザでトップページを開いて、ソースコードを調べるのですが、ここでは rak を使ってみましょう。
rak は Ruby で書かれた grep のようなツールです。
rak は gem でインストールします。
> sudo gem install rak
rak はあるディレクトリ以下のファイル群から特定のパターンを含む行をリストアップしてくれます。
account
という文字列を含む行が見つかれば、そこが怪しいですね。
> rak account app/views app/views/layouts/application.rhtml 16| <td id="account"> 17| <%= render :partial => 'shared/account' %> app/views/shared/_account.rhtml 2| <% unless params[:controller] == 'account' -%> 4| :controller => '/account', :action => 'show' %> |
ビンゴ!
rak は色付きで分かりやすく結果を出力してくれます。
ただし、Windows で色を表示したい場合は、win32console パッケージを gem でインストールする必要があります。
app/views/shared/_account.rhtml
の 2-5 行を次のように修正します。
<% unless params[:controller] == 'accounts' -%> <%= link_to @current_user.full_name + 'さんのアカウント', :controller => '/accounts', :action => 'show' %> | <% end -%>
test:integration
タスクを実行すると…
2 tests, 66 assertions, 0 failures, 0 errors
完璧です。
次回からは、asagao を Rails 2.2 的により正しいアプリケーションにするため、ソースコードを見直していくことにしましょう。