Fendo181 / RoRTutorial_chap04

0 stars 0 forks source link

演習5(5.3.5) #18

Closed Fendo181 closed 7 years ago

Fendo181 commented 7 years ago

(1)

footerパーシャルのabout_pathをcontact_pathに変更してみて、テストが正しくエラーを捕まえてくれるかどうか確認してみてください。

怒られる。


 FAIL["test_layout_lnks", SiteLayoutTest, 0.6658580000075744]
 test_layout_lnks#SiteLayoutTest (0.67s)
        Expected at least 1 element matching "a[href="/about"]", found 0..
        Expected 0 to be >= 1.
        test/integration/site_layout_test.rb:11:in `block in <class:SiteLayoutTest>'

  6/6: [=================================================================================================================================================] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.70129s

6 tests, 13 assertions, 1 failures, 0 errors, 0 skips

(2)

リスト 5.35で示すように、Applicationヘルパーで使っているfull_titleヘルパーを、test環境でも使えるようにすると便利です。こうしておくと、リスト 5.36のようなコードを使って、正しいタイトルをテストすることができます。ただし、これは完璧なテストではありません。たとえばベースタイトルに「Ruby on Rails Tutoial」といった誤字があったとしても、このテストでは発見することができないでしょう。この問題を解決するためには、full_titleヘルパーに対するテストを書く必要があります。そこで、Applicationヘルパーをテストするファイルを作成し、リスト 5.37のFILL_INの部分を適切なコードに置き換えてみてください。ヒント: リスト 5.37ではassert_equal <期待される値>, <実際の値>といった形で使っていましたが、内部では==演算子で期待される値と実際の値を比較し、正しいかどうかのテストをしています。

最初に、app/helpers/application_helper.rbにかかれた、helpr自体をテストする為に、inxcludeしてくる。

require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
Minitest::Reporters.use!

class ActiveSupport::TestCase
  fixtures :all
  include ApplicationHelper
end

統合テスト(リンク):ここでは最後の行に/contactにアクセスした際のtitleの挙動をみる。

require 'test_helper'

class SiteLayoutTest < ActionDispatch::IntegrationTest
  test 'layout lnks' do
    get root_path
    assert_template 'static_pages/home'
    # Homeページのリンクの個数も調べる
    assert_select "a[href=?]",root_path,count:2
    # "?" をabout_pathに置換しています
    assert_select "a[href=?]",help_path
    assert_select "a[href=?]",about_path
    assert_select "a[href=?]",contact_path
    get contact_path
    assert_select "title",full_title("Contact")
  end
end

単体テスト:Applicationヘルパーに書かれた、full titleヘルパーをテストする単体テストを追加

#Applicationヘルパーをテストするファイル

require 'test_helper'
class AppllicationHelperTest < ActionView::TestCase
  #app/helpers/application_helper.rbにfull_titleヘルパーに対する単体テスト
  test "full title helper" do
    assert_equal full_title,"Ruby on Rails Tutorial Sample App"
    assert_equal full_title("Help"),"Help | Ruby on Rails Tutorial Sample App"
  end
end