Komei22 / rails-tutorial

rails-tutorialのsample_app作っていきます
0 stars 0 forks source link

ch7.4.4演習 #50

Closed Komei22 closed 7 years ago

Komei22 commented 7 years ago

演習1

7.4.2で実装したflashに対するテストを書いてみてください。どのくらい細かくテストするかはお任せします。リスト 7.34に最小限のテンプレートを用意しておいたので、参考にしてください (FILL_INの部分を適切なコードに置き換えると完成します)。ちなみに、テキストに対するテストは壊れやすいです。文量の少ないflashのキーであっても、それは同じです。筆者の場合、flashが空でないかをテストするだけの場合が多いです

  test "valid signup information" do
    get signup_path
    assert_difference 'User.count', 1 do
      post users_path, params: { user: { name:  "Example User",
                                         email: "user@example.com",
                                         password:              "password",
                                         password_confirmation: "password" } }
    end
    follow_redirect!
    assert_template 'users/show'
    assert_not flash.empty?
  end

演習2

本文中でも指摘しましたが、flash用のHTML (リスト 7.31) は読みにくいです。より読みやすくしたリスト 7.35のコードに変更してみましょう。変更が終わったらテストスイートを実行し、正常に動作することを確認してください。なお、このコードでは、Railsのcontent_tagというヘルパーを使っています。

<%= content_tag(:div, message, class: "alert alert-#{message_type}") %>

content_tagは第一引数にタグ第二以降の引数に表示するテキストを指定

演習3

リスト 7.28のリダイレクトの行をコメントアウトすると、テストが失敗することを確認してみましょう。

[1] guard(main)>
14:30:06 - INFO - Run all
14:30:06 - INFO - Running: all tests
Started with run options --seed 55163

ERROR["test_valid_signup_information", UsersSignupTest, 0.782729999627918]
 test_valid_signup_information#UsersSignupTest (0.78s)
RuntimeError:         RuntimeError: not a redirect! 204 No Content
            test/integration/users_signup_test.rb:27:in `block in <class:UsersSignupTest>'

  19/19: [============================================================================] 100% Time: 00:00:01, Time: 00:00:01

Finished in 1.02516s
19 tests, 42 assertions, 0 failures, 1 errors, 0 skips

演習4

リスト 7.28で、@user.saveの部分をfalseに置き換えたとしましょう (バグを埋め込んでしまったと仮定してください)。このとき、assert_differenceのテストではどのようにしてこのバグを検知するでしょうか? テストコードを追って考えてみてください。

@user.saveを削除したことによってuser情報が保存されなくなった。 そのため、テストのassert_differenceの部分で行なっていた登録前と登録後でuser数が1増加しているという条件を満たせなくなった