ぞえの技術めも

Ruby on Rails勉強中

【76日目】【1日20分のRailsチュートリアル】【第8章】フラッシュメッセージのテストを作成する

Ruby on Railsチュートリアル(第3版)

今日は「8.1.5 フラッシュのテスト」から。

8.1.5 フラッシュのテスト

アプリケーションのログインの挙動をテストするために、最初に統合テストを生成します。

生成します。

$ rails generate integration_test users_login
      invoke  test_unit
      create    test/integration/users_login_test.rb

次に、図8.5と図8.6の手順をテストコードで再現する必要があります。基本的な流れを以下に示します。

無効なユーザー情報でログインしようとしたらエラーメッセージが表示されて、
Homeページ移動したらエラーメッセージが表示されないことを確認するテストを作成する。

test/integration/users_login_test.rb

require 'test_helper'

class UsersLoginTest < ActionDispatch::IntegrationTest

  test "login with invalid information" do
    get login_path
    assert_template 'sessions/new'
    post login_path, session: { email: "", password: "" }
    assert_template 'sessions/new'
    assert_not flash.empty?
    get root_path
    assert flash.empty?
  end
end

テスト実行。

$ bundle exec rake test TEST=test/integration/users_login_test.rb
1 tests, 4 assertions, 1 failures, 0 errors, 0 skips

エラー出ますね。

リスト8.7の失敗するテストをパスさせるには、本編のコードでflashflash.nowに置き換えます。

flash.nowのメッセージは表示した後リクエストが発生したときは消滅するらしいので一度きり、感じなのかな?

trwtnb.blogspot.jp

app/controllers/sessions_controller.rb

      flash.now[:danger] = 'Invalid email/password combination'

テスト実行して問題ないことを確認。

$ bundle exec rake test TEST=test/integration/users_login_test.rb
1 tests, 4 assertions, 0 failures, 0 errors, 0 skips
$ bundle exec rake test
23 tests, 48 assertions, 0 failures, 0 errors, 0 skips

サーバー起動して実動作も見てみたけど、ちゃんとHomeページ表示したときはエラーメッセージ消えてました。

$ rails server -b $IP -p $PORT

今日の作業時間は【18分】

次は「8.2 ログイン」から。