質問するログイン新規登録

Q&A

0回答

1546閲覧

Ruby on Rails チュートリアル テスト内容が理解できているか確認していただけないでしょうか

kazukkinakamura

総合スコア26

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2018/10/14 10:57

編集2018/10/15 23:36

0

0

Ruby on Rails チュートリアル Rails5.1(第4版)
AWSでやっています。

#質問内容:リスト 10.20のテスト内容を日本語に起こしてみたのですが、正しいでしょうか。理解できているのかを確認したいです。

チュートリアルに、以下のテストがあります。

リスト 10.20: editとupdateアクションの保護に対するテストする red
test/controllers/users_controller_test.rb

require 'test_helper' class UsersControllerTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) end . . . test "should redirect edit when not logged in" do get edit_user_path(@user) assert_not flash.empty? assert_redirected_to login_url end test "should redirect update when not logged in" do patch user_path(@user), params: { user: { name: @user.name, email: @user.email } } assert_not flash.empty? assert_redirected_to login_url end end

また、以下のクラスがあります。

リスト 10.15: beforeフィルターにlogged_in_userを追加する red
app/controllers/users_controller.rb

class UsersController < ApplicationController before_action :logged_in_user, only: [:edit, :update] . . . private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end # beforeアクション # ログイン済みユーザーかどうか確認 def logged_in_user unless logged_in? flash[:danger] = "Please log in." redirect_to login_url end end end

リスト 10.19: セキュリティモデルを確認するためにbeforeフィルターをコメントアウトするgreen
app/controllers/users_controller.rb

class UsersController < ApplicationController # before_action :logged_in_user, only: [:edit, :update] . . . end

テストの処理内容を日本語に起こします。

##テストひとつめ

test "should redirect edit when not logged in" do get edit_user_path(@user) assert_not flash.empty? assert_redirected_to login_url end

テスト内容は、
users.ymlの内容が代入されている@user変数を用いて、(ログインを行わずに)edit_user_path(相対パス)へアクセス。
ユーザー編集ページへ移動。
flashがempty(空ではないか)か、チェック。assert_notなので、

  • flashが空のとき   (真である)なら テストはRED
  • flashが空でないとき (偽である)なら テストはGREEN

assert_redirected_to login_urlは、login_url(redirectなので絶対パス)へリダイレクトしたかをチェック

  • リダイレクトしていたら   GREEN
  • リダイレクトしていなければ RED

そして、

リスト 10.19: セキュリティモデルを確認するためにbeforeフィルターをコメントアウトするgreen
app/controllers/users_controller.rb

class UsersController < ApplicationController # before_action :logged_in_user, only: [:edit, :update] . . . end

このように、

# before_action :logged_in_user, only: [:edit, :update]

となっていた場合は、

# ログイン済みユーザーかどうか確認 def logged_in_user unless logged_in? flash[:danger] = "Please log in." redirect_to login_url end end

logged_in_userメソッドがeditとupdateアクションの前に動作しなくなるから、
ログインを行わずに、編集ページへアクセスしたのに、

  • flash[:danger] = "Please log in."が空である
  • login_urlにリダイレクトされなかった

ため、テストはREDになる。

という認識であっているでしょうか。

長文読んでいただきありがとうございました。

テスト二つ目を書こうかと思いましたが、長いのでひとつだけにします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問