LoginSignup
0
0

More than 3 years have passed since last update.

Ruby on Rails チュートリアル(第4版) 第5章

Last updated at Posted at 2020-07-04

5.1.1 演習

1.Webページと言ったらネコ画像、というぐらいにはWebにはネコ画像が溢れていますよね。リスト 5.4のコマンドを使って、図 5.3のネコ画像をダウンロードしてきましょう8 。

$ curl -OL cdn.learnenough.com/kitten.jpg

2.mvコマンドを使って、ダウンロードしたkitten.jpgファイルを適切なアセットディレクトリに移動してください (参考: 5.2.1)。

$ mv kitten.jpg app/assets/images/

3.image_tagを使って、kitten.jpg画像を表示してみてください (図 5.4)。

/app/views/static_pages/home.html.erb
<%= image_tag("kitten.jpg", alt: "kitten") %>

5.1.2 演習

1.リスト 5.10を参考にして、5.1.1.1で使ったネコ画像をコメントアウトしてみてください。また、ブラウザのHTMLインスペクタ機能を使って、コメントアウトするとHTMLのソースからも消えていることを確認してみてください。

/app/views/static_pages/home.html.erb
<%#= image_tag("kitten.jpg", alt: "kitten") %>

2.リスト 5.11のコードをcustom.scssに追加し、すべての画像を非表示にしてみてください。うまくいけば、Railsのロゴ画像がHomeページから消えるはずです。先ほどと同様にインスペクタ機能を使って、今度はHTMLのソースコードは残ったままで、画像だけが表示されなくなっていることを確認してみてください。
 省略

5.1.3 演習

1.Railsがデフォルトで生成するheadタグの部分を、リスト 5.18のようにrenderに置き換えてみてください。ヒント: 単純に削除してしまうと後でパーシャルを1から書き直す必要が出てくるので、削除する前にどこかに退避しておきましょう。
 省略
2.リスト 5.18のようなパーシャルはまだ作っていないので、現時点ではテストは redになっているはずです。実際にテストを実行して確認してみましょう。
 RED
3.layoutsディレクトリにheadタグ用のパーシャルを作成し、先ほど退避しておいたコードを書き込み、最後にテストが green に戻ることを確認しましょう。

 パーシャルを作成

$ touch app/views/layouts/_rails_default.html.erb
/sample_app/app/views/layouts/_rails_default.html.erb
<%= csrf_meta_tags %>
<%= stylesheet_link_tag    'application', media: 'all',
                           'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application',
                           'data-turbolinks-track': 'reload' %>

 GREENに・・・ならず。
 /home/ec2-user/environment/sample_app/db/schema.rb doesn't exist yet. Run rails db:migrate to create it, then try again. If you do not intend to use a database, you should instead alter /home/ec2-user/environment/sample_app/config/application.rb to limit the frameworks that will be loaded.
 とのことなので、
 rails db:migrateを実行
 まだエラーが出たものの、コードに間違いは無さそうなのでとりあえずサーバーを再起動 Ctrl+Crails s
 GREENになった。良かった!

5.2.2 演習

1.5.2.2で提案したように、footerのCSSを手作業で変換してみましょう。具体的には、リスト 5.17の内容を1つずつ変換していき、リスト 5.20のようにしてみてください。
 省略

5.3.2 演習

1.実は名前付きルートは、as:オプションを使って変更することができます。有名なFar Sideの漫画に倣って、Helpページの名前付きルートをhelfに変更してみてください (リスト 5.29)。
 省略

2.先ほどの変更により、テストが redになっていることを確認してください。リスト 5.28を参考にルーティングを更新して、テストを greenにして見てください。

/test/controllers/static_pages_controller_test.rb
  test "should get help" do
    get helf_path
    assert_response :success
    assert_select "title", "Help | #{@base_title}"
  end

3.エディタのUndo機能を使って、今回の演習で行った変更を元に戻して見てください。
 Ctrl+Zのことらしい。元に戻して保存。

5.3.3 演習

1.リスト 5.29のようにhelfルーティングを作成し、レイアウトのリンクを更新してみてください。

/config/routes.rb
  get  '/help',    to: 'static_pages#help', as: 'helf'
/app/views/layouts/_header.html.erb
<li><%= link_to "Help",   helf_path %></li>

2.前回の演習と同様に、エディタのUndo機能を使ってこの演習で行った変更を元に戻してみてください。
 省略

5.3.4 演習

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

/app/views/layouts/_footer.html.erb
<li><%= link_to "About",   contact_path %></li>

 REDになる。Expected at least 1 element matching "a[href="/about"]", found 0..

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

/test/helpers/application_helper_test.rb
require 'test_helper'

class ApplicationHelperTest < ActionView::TestCase
  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

5.4.1 演習

1.表 5.1を参考にしながらリスト 5.41を変更し、users_new_urlではなくsignup_pathを使えるようにしてみてください。

/test/controllers/users_controller_test.rb
require 'test_helper'

class UsersControllerTest < ActionDispatch::IntegrationTest
  test "should get new" do
    get signup_path
    assert_response :success
  end

end

2.先ほどの変更を加えたことにより、テストが redになったことを確認してください。なお、この演習はテスト駆動開発 (コラム 3.3) で説明した red/green のリズムを作ることを目的としています。このテストは次の5.4.2で greenになるよう修正します。
 REDになる。NameError: undefined local variable or method `signup_path' for #UsersControllerTest:0x00000000044804f0

5.4.2 演習

1.もしまだ5.4.1.1の演習に取り掛かっていなければ、まずはリスト 5.41のように変更し、名前付きルートsignup_pathを使えるようにしてください。また、リスト 5.43で名前付きルートが使えるようになったので、現時点でテストが greenになっていることを確認してください。
 GREENになった。

2.先ほどのテストが正しく動いていることを確認するため、signupルートの部分をコメントアウトし、テスト redになることを確認してください。確認できたら、コメントアウトを解除して greenの状態に戻してください。

/config/routes.rb
  # get  '/signup',  to: 'users#new'

 REDになった。NameError: undefined local variable or method `signup_path' for #UsersControllerTest:0x0000000002acb078
 元に戻したらGREENになった。

3.リスト 5.32の統合テストにsignupページにアクセスするコードを追加してください (getメソッドを使います)。コードを追加したら実際にテストを実行し、結果が正しいことを確認してください。ヒント: リスト 5.36で紹介したfull_titleヘルパーを使ってみてください。

/test/integration/site_layout_test.rb
get signup_path
    assert_select "title", full_title("Sign up")

メモ

assert_equal <期待される値>, <実際の値>は、内部では==演算子で期待される値と実際の値を比較し、正しいかどうかのテストをしている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0