質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
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というインフラから提供する商用サービスです。

Q&A

0回答

1479閲覧

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

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.48%

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

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

質問する

関連した質問