Rails tutorialの第5章内にありました、Railsにおける総合テストについてまとめました。
総合テスト
例えば、レイアウトにリンクをはっているとし、これらをテストしてみます。
リンクを一つ一つクリックしてこれらのリンクが正しく動いているかどうかチェックすることもできますが、
変更が入るたびに同じことをやるのは面倒です
そこでこれらをテストする総合テストを書いてみます。
総合テストの準備
まずnavバーにHelpリンクを貼るとします。
ルーティング→リンクを貼る→テストコードを書く
という流れです。
ルーティング
まずroute.rb
にHelpページ対するルーティングを書いていきます
書き方は色々ありますが、例として以下の3通りをあげます。
#1.help_url get 'static_pages/help' #2.help_path get '/help', to: 'static_pages#help' #3.halfにアクセスするとhelp_urlとなる get '/help', to: 'static_pages#help', as: 'half'
- URL:
/static_pages/help
にアクセスすると、static_pagesコントローラのhelp アクションにルーティングします
またRailsのビューテンプレートでurlを表すパスが、help_urlとなります - URL:
/help
にアクセスすると、static_pagesコントローラのhelp アクションにルーティングします またRailsのビューテンプレートでurlを表すパスが、help_pathとなります - URL:
/half
にアクセスすると、static_pagesコントローラのhelp アクションにルーティングします またRailsのビューテンプレートでurlを表すパスが、help_pathとなります
No. | URL | ビューテンプレート |
---|---|---|
#1.help_url | /static_pages/help |
help_url |
#2.help_path | /help |
help_path |
#3.half | /half |
help_path |
asの使い方ついては下記に詳しいです。 tkymtk.hatenablog.com
リンク
次にリンクを貼ります
application.html.erb
<%= link_to "Help", help_path %>
これをerbからhtmlに起こすと<a href="/static_pages/helo">Help</a>
となります
テストコード
次にユニットテストコードを作ります
test/controllers/static_pages_controller_test.rb
require 'test_helper' class StaticPagesControllerTest < ActionDispatch::IntegrationTest test "should get help" do get help_path assert_response :success end end
ここでget help_path
とすることでビューテンプレートのhelp_path(ここでは/help
)をGETしに行きます
ここで$ rails t
でユニットテストするのも一つですね。
総合テスト
上記以外にもルートページをルーティングしリンクを貼ることにします
(ここではHomeページにルーティングすることとします。Homeページにはナビバーを設定し、Home、Help、About、Contactのリンクを貼ることにします。)
このリンクが正しく貼られているかを試験するために、総合テストを行います。
総合テストではアプリを上から下まで一通り舐めることができます。(ただし文言といった細かい項目はユニット試験で行う方が良いでしょう)
総合テストの試験項目として 1. ルートURL にGETリクエストを送る. 2. 正しいページテンプレートが描画されているかどうか確かめる. 3. Home、Help、About、Contactの各ページへのリンクが正しく動くか確かめる.
を設定します
テストコード作成
まず総合テスト用のテストコードを作っていきます。
以下のコマンドでテストコードのテンプレートが作成できます。
$ rails generate integration_test site_layout
次にassert_templateメソッドを使って、Homeページが正しいビューを描画しているかどうか確かめます
test "layout links" do get root_path #1 assert_template 'static_pages/home' #2 #3 assert_select "a[href=?]", root_path, count: 2 #同じページにroot_pathが2つあるためcount 2 assert_select "a[href=?]", help_path # htmlにaタグがあってpathがhelp_pathがあるかどうか assert_select "a[href=?]", about_path assert_select "a[href=?]", contact_path end
テストコード中#1 get root_path
でルートページをGETできるか
#2 assert_template 'static_pages/home'
で'static_pages/home'ページテンプレートが描画されているか
#3
でそれぞれのリンクにアクセスできるかを確認します。
総合テスト実施
あとは$ rails test:integration
を叩くと総合テストが実施されます。