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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

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

Ruby

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Q&A

解決済

1回答

1566閲覧

【Rails】assert_notについて

zyno

総合スコア41

Ruby on Rails 5

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

Ruby

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

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

1グッド

4クリップ

投稿2018/07/31 00:00

編集2018/07/31 01:30

RailsTutorialを行っていたところ、以下のようなテストコードが現れました。

テストファイル

rb

1require 'test_helper' 2 3class MicropostTest < ActiveSupport::TestCase 4 5 def setup 6 @user = users(:michael) 7 @micropost = Micropost.new(content: "Lorem ipsum", user_id: @user.id) 8 end 9 10 test "should be valid" do 11 assert @micropost.valid? 12 end 13 14 test "user id should be present" do 15 @micropost.user_id = nil 16 assert_not @micropost.valid? 17 end 18 test "content should be present" do 19 @micropost.content = " " 20 assert_not @micropost.valid? 21 end 22 23 test "content should be at most 140 characters" do 24 @micropost.content = "a" * 141 25 assert_not @micropost.valid? 26 end

@micropostというインスタンス変数に新しく作成するクラスデータ?を代入することで、@micropostは値を得ます。

rb

1 test "should be valid" do 2 assert @micropost.valid? 3 end

は、assert @micropost.valid?が有効であればtrue、していなければfalse

rb

1 test "user id should be present" do 2 @micropost.user_id = nil 3 assert_not @micropost.valid? 4 end 5 test "content should be present" do 6 @micropost.content = " " 7 assert_not @micropost.valid? 8 end 9 10 test "content should be at most 140 characters" do 11 @micropost.content = "a" * 141 12 assert_not @micropost.valid? 13 end

上の3つは、バリデーションに引っかかるように@micropostを設定し、その後に、assert_not @micropost.valid?が有効でなければtrue、有効であればfalseを返す

という認識でよろしいでしょうか?

正直変な質問だと思いますが、validやassertなど様々なメソッドが多すぎて全容が掴めていないのが現状&独学という状況のため、ちょっとのことでも不安になってしまっているというのが経緯です。

なお、モデル内バリデーションは以下のコードになっております。

モデル内

rb

1class Micropost < ApplicationRecord 2 belongs_to :user 3 validates :user_id, presence: true 4 validates :content, presence: true, length: { maximum: 140 } 5end
sassan738👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

assert @micropost.valid?が有効であればtrue、していなければfalse

上の3つは、バリデーションに引っかかるように@micropostを設定し、その後に、assert_not @micropost.valid?が有効でなければtrue、有効であればfalseを返す

という認識でよろしいでしょうか?

はい、だいたいよろしいんではないでしょうか。

assertassert_notはテスト(テスティングフレームワーク)のメソッドです。

test ... do ... endの中では、assert foo は、fooが真なら成功、fooが偽なら失敗になります。

assert_not foo はその逆で、fooが偽なら成功、fooが真なら失敗になります。

ちなみに、Rubyでは、偽はnilかfalse、真はそれ以外になります。

valid?というメソッドは、モデル(ActiveRecord)のメソッドです。バリデーションを実行して、モデルが正しい値かどうかを調べるものです。
バリデーションが通れば真、通らなければ偽を返します。


テスティングフレームワークがよくわからん、ということであれば、rails cでコンソールから実行してみると良いかもしれません。
ターミナルで、

rails c

をするとirbか何かのプロンプトが出るので、そこで、

@user = users(:michael) @micropost = Micropost.new(content: "Lorem ipsum", user_id: @user.id) @micropost.valid? ##=> ここではtrueが返るはず @micropost.user_id = nil @micropost.valid? ##=> ここではfalseが返るはず

などと打ち込むことで、手で実行して確認できます。

とはいえ、都度都度こうやって確認するのは大変だし確実でもないので、これを自動でやるためにテストコードを書いて実行する、ということなのでした。

投稿2018/07/31 03:43

takahashim

総合スコア1877

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問