🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Ruby on Rails

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

Q&A

解決済

2回答

860閲覧

rails tutorial 第7章 7.3.4 失敗時のテスト が成功しない。

cartoon

総合スコア4

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2019/11/28 01:59

前提・実現したいこと

rails turotial学習中の者なのですが、
第7章の
7.3.4 失敗時のテスト にて
bundle exec rake testでテスト成功せずに先へ進まなくなってしまいました。
通常通り進んでいれば止まるようなところでは無いような場所の為か
検索しても同様の症状を起こされている方はいらっしゃらないようで困っております。

どなたかご教授いただければ幸いです。

発生している問題・エラーメッセージ

ERROR["test_invalid_signup_information", UsersSignupTest, 0.425589790000231] test_invalid_signup_information#UsersSignupTest (0.43s) NameError: NameError: undefined local variable or method `user' for #<UsersSignupTest:0x00000000061a7998> Did you mean? users test/integration/users_signup_test.rb:7:in `block in <class:UsersSignupTest>' test/integration/users_signup_test.rb:7:in `block in <class:UsersSignupTest>' FAIL["test_email_validation_should_reject_invalid_addresses", UserTest, 0.6627793839998048] test_email_validation_should_reject_invalid_addresses#UserTest (0.66s) "user@example,com" should be invalid test/models/user_test.rb:34:in `block (2 levels) in <class:UserTest>' test/models/user_test.rb:32:in `each' test/models/user_test.rb:32:in `block in <class:UserTest>' 16/16: [=================================] 100% Time: 00:00:00, Time: 00:00:00 Finished in 0.67250s 16 tests, 30 assertions, 1 failures, 1 errors, 0 skips

該当のソースコード

test/integration/users_signup_test.rb ファイルにて

require 'test_helper' class UsersSignupTest < ActionDispatch::IntegrationTest test "invalid signup information" do get signup_path assert_no_difference 'user.count' do post users_path, user: { name: "example_invalid", email: "user@invalid", password: "foo", password_confirmation: "bar" } end assert_template 'users/new' end end

試したこと

usersの部分をそれぞれuserに変更等。。。。

補足情報(FW/ツールのバージョンなど)

cloud9 IDE
Rails 5.1.6
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

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

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

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

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

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

guest

回答2

0

エラーメッセージの通り、userという変数はこの場に存在しません。

チェックしたかったのは、ユーザーの全件数、つまり'User.count'なのではないでしょうか。

投稿2019/11/28 02:05

maisumakun

総合スコア145977

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

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

cartoon

2019/11/28 04:36

回答ありがとうございます。 assert_no_difference 'user.count' do post users_path, user: の辺りのuser.countを User.count に変更してみたり users_path, の後を User.countやcountなどに変更してみたりしましたが依然変化はなく失敗してしまいます。 test_email_validation_should_reject_invalid_addresses#UserTest とエラー文があるので user_test.rbの方のファイルのコードも確認してみたのですが、どうも理解できません。 下記にコード記載いたします。 ``` require 'test_helper' class UserTest < ActiveSupport::TestCase def setup @user = User.new(name: "Example User", email: "user@example.com", password: "foobar", password_confirmation: "foobar") end test "name should not be too long" do @user.name = "a" * 51 assert_not @user.valid? end test "email should not be too long" do @user.email = "a" * 244 + "@example.com" assert_not @user.valid? end test "email validation should accept valid addresses" do valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org first.last@foo.jp alice+bob@baz.cn] valid_addresses.each do |valid_address| @user.email = valid_address assert @user.valid?, "#{valid_address.inspect} should be valid" end end test "email validation should reject invalid addresses" do invalid_addresses = %w[ user@example,com user_at_foo.org user.name@example. foo@bar_baz.com foo@bar+baz.com] invalid_addresses.each do |invalid_address| @user.email = invalid_address assert_not @user.valid?, "#{User.count} should be invalid" end end test "email addresses should be unique" do duplicate_user = @user.dup duplicate_user.email = @user.email.upcase @user.save assert_not duplicate_user.valid? end test "email addresses should be saved as lower-case" do mixed_case_email = "Foo@ExAMPle.CoM" @user.email = mixed_case_email @user.save assert_equal mixed_case_email.downcase, @user.reload.email end test "password should be present (nonblank)" do @user.password = @user.password_confirmation = " " * 6 assert_not @user.valid? end test "password should have a minimum length" do @user.password = @user.password_confirmation = "a" * 5 assert_not @user.valid? end end ``` 理解力が足りず大変申し訳ございません、引き続きお付き合いいただければ幸いに存じます。よろしくお願いします。
maisumakun

2019/11/28 04:37

'user.count'を'User.count'としたら、どのようなエラーが出ますか?
cartoon

2019/11/28 06:06

迅速に回答ありがとうございます。 ハッシュの部分1つ見落としてました!ありがとうございます!1つエラーが減りました!! 'user.count'を'User.count'に変更しbundle exec rake test実施後は下記のエラー内容でした。 ``` FAIL["test_email_validation_should_reject_invalid_addresses", UserTest, 0.05876526899987766] test_email_validation_should_reject_invalid_addresses#UserTest (0.06s) 0 should be invalid test/models/user_test.rb:34:in `block (2 levels) in <class:UserTest>' test/models/user_test.rb:32:in `each' test/models/user_test.rb:32:in `block in <class:UserTest>' 16/16: [=================================] 100% Time: 00:00:00, Time: 00:00:00 Finished in 0.45371s 16 tests, 32 assertions, 1 failures, 0 errors, 0 skips ``` user_test.rbは特に変更は行なっておりません。 的確な回答だったので引続きご教授願いたいです。。
guest

0

自己解決

今まで実践してきたrails tutorialのバージョンが古かったようで、今まで見ていたのが4.2のバージョンで、正しく進めるには5.1のバージョンでした。5章から全て見直しをして進めたら自己解決しました。
恐らく6章の6.2辺りからコードの書き方が間違ってしまっていたのかと思われます。

投稿2019/12/02 06:05

cartoon

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問