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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Cloud9

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

Ruby on Rails

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

Q&A

解決済

1回答

1625閲覧

Rails Tutorialでrails testがGREENにならない問題について

kokokouki

総合スコア6

Cloud9

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/09/27 14:47

編集2020/09/28 06:46

前提・実現したいこと

現在rails tutorialを進めている初学者の者です。
8章においてrails test(rails tutorial8章リスト8.28)が通らず詰まったので質問させて頂きます。
分かるかたいらっしゃいましたら教えて頂きたいです。

拙い文章でわかりにくいとは思いますがどうぞよろしくお願いいたします。

##以下エラーメッセージです。
errorとfailureが一つづつでています。

エラーメッセージ $ rails test Running via Spring preloader in process 5965 Started with run options --seed 61929 FAIL["test_email_validation_should_reject_invalid_addresses", UserTest, 0.4517165880001812] test_email_validation_should_reject_invalid_addresses#UserTest (0.45s) "foo@bar..com" should be invalid test/models/user_test.rb:40:in `block (2 levels) in <class:UserTest>' test/models/user_test.rb:38:in `each' test/models/user_test.rb:38:in `block in <class:UserTest>' ERROR["test_invalid_signup_information", UsersSignupTest, 0.4625528070000655] test_invalid_signup_information#UsersSignupTest (0.46s) ActionController::UrlGenerationError: ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"users"}, missing required keys: [:id] test/integration/users_signup_test.rb:8:in `block (2 levels) in <class:UsersSignupTest>' test/integration/users_signup_test.rb:7:in `block in <class:UsersSignupTest>' 22/22: [=========================================] 100% Time: 00:00:00, Time: 00:00:00 Finished in 0.52020s

以下必要になりそうなファイルを載せていきます。

//user_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 user_path, params: { user: { name: "", email: "user@invalid", password: "foo", password_confirmation: "bar" } } end assert_template 'users/new' assert_select 'div#error_explanation' assert_select 'div.alert' end test "valid signup information" do get signup_path assert_difference 'User.count', 1 do post users_path, params: { user: { name: "Example User", email: "user@example.com", password: "password", password_confirmation: "password" } } end follow_redirect! assert_template 'users/show' assert is_logged_in? end end
//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 "should be valid" do assert @user.valid? end test "name should be present" do @user.name = " " assert_not @user.valid? end test "email should be present" do @user.email = " " assert_not @user.valid? 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 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 foo@bar..com] invalid_addresses.each do |invalid_address| @user.email = invalid_address assert_not @user.valid?, "#{invalid_address.inspect} 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
//user_controller.rb class UsersController < ApplicationController def show @user = User.find(params[:id]) end def new @user = User.new end def create @user = User.new(user_params) if @user.save log_in @user flash[:success] = "Welcome to the Sample App!" redirect_to @user else render 'new' end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end end
//routes.rb Rails.application.routes.draw do root 'static_pages#home' get '/help', to: 'static_pages#help' get '/about', to: 'static_pages#about' get '/contact', to: 'static_pages#contact' get '/signup', to: 'users#new' get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' resources :users end
##users.yml michael: name: Michael Example email: michael@example.com password_digest: <%= User.digest('password') %>
##users_login_test.rb require 'test_helper' class UsersLoginTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) end test "login with invalid information" do get login_path assert_template 'sessions/new' post login_path, params: { session: { email: "", password: "" } } assert_template 'sessions/new' assert_not flash.empty? get root_path assert flash.empty? end test "login with valid information" do get login_path post login_path, params: { session: { email: @user.email, password: 'password' } } assert_redirected_to @user follow_redirect! assert_template 'users/show' assert_select "a[href=?]", login_path, count: 0 assert_select "a[href=?]", logout_path assert_select "a[href=?]", user_path(@user) end end

試したこと

エラーメッセージにて"foo@bar..com"がinvalidと出ているので試しにuser_test_rbファイルの
test "email validation should reject invalid addresses"内にある"foo@bar..com"を消した所一応は通りましたが"foo@bar..com"もinvalidとして設定したいので何処を直したらいいか教えて頂きたいです。

もう一つのerrorに関しては何処かに引数を入れなければならないのかと考えてはいるのですがそれが何処なのか、またはその考え自体が間違っているのかわからない状況です。

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

macbookair
catalinaOS
AWS cloud9にて実行中
rails -v 5.1.6
rails tutorial 5

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

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

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

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

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

m.ts10806

2020/09/27 21:49

それぞれのバージョンとチュートリアルで参照しているバージョンをご提示ください。
kokokouki

2020/09/28 00:37

遅くなり申し訳ありません。 補足情報にも追記しましたが railsが5.1.6 rails tutorial 5 です。
guest

回答1

0

ベストアンサー

"foo@bar..com"もinvalidとして設定したいので何処を直したらいいか教えて頂きたいです。

正規表現が適切じゃないためfoo@bar..comがテストをすり抜けているようです。

Ruby

1# /models/user.rbを下記のように修正 2 3VALID_EMAIL_REGEX = /\A([^@\s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})\z/i

Railsガイド:カスタムバリデータ

投稿2020/09/28 01:14

no1knows

総合スコア3365

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

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

kokokouki

2020/09/28 01:42

ありがとうございます!無事通りました! もう一つエラーがあるのでそちらもお時間あって分かるようでしたら教えて頂きたいです!
no1knows

2020/09/28 02:09

https://railstutorial.jp/chapters/basic_login?version=5.1#code-real_user_fixture モデルテストなのでpassword_digestを利用してみてください。 ※password,password_confirmationはフォームからの入力ですが、DBではpassword_digestに登録されているのではないでしょうか? 基本(Railsガイド)と異なることをするのは良いと思いますが、まずは1周から2周して内容をきちんと理解してから、応用していくと良いかと思います。
kokokouki

2020/09/28 04:02

変えてみましたがやはり通りませんでした。 一応ここまでtutorialの通りに進めてきたので応用てみなことをした覚えなどはないのですが、、、
kokokouki

2020/09/28 06:41

test/fixtures/users.ymlファイルは利用していますが、チュートリアル上だとuser_test.rbでconfirmationが利用されていたのでそのまま書き写しました。 先ほどご指摘いただいたのでtest/fixtures/users.ymlファイルのconfirmationの部分をdigestに変えたのですが同じエラーが出てしまっています。
kokokouki

2020/09/28 06:49

現時点でfixtureをdigestに変えるにはuser_test.rbのpassword_confimationを password_digestに書き換えるだけでは不十分なのでしょうか? fixture/user.ymlとusers_login_test.rbを他のコードの下に追記させて頂いたので、お時間あるようでしたら 参考にして頂きたいです。
no1knows

2020/09/28 07:46

確認なのですが、コードをそのまま書きうつした状態でGreenになりますか?
kokokouki

2020/09/28 08:42

ならないです。今回のせたコードは全て写したものです。 自分で何回も確認はしたのですが何処か記載ミスなどあればご指摘頂きたいです。
no1knows

2020/09/28 08:48

一つ一つ調べるのも手間なので、一度、記載したコードとチュートリアルをdifffで確認してみてはどうでしょうか? https://difff.jp/
kokokouki

2020/09/28 09:11

確認したところ、user_sign_up.rbの一部分だけusers_pathがuser_pathになっていました、、、 こんなしょうもないミスに長い時間お付き合い頂き本当にありがとうございました!! おかげで解決しました。
no1knows

2020/09/28 09:20

それは良かったです! あと今後期待通りに動かない場合、今回のように比較サービスを使って記述ミスを確認したり、デバッグする方法を学ぶとよりスムーズに解決できるようになるかと思います。 少し先になるのかもしれませんが、下記動画をはじめから見ると良いかと思います。 https://www.youtube.com/watch?v=5fyrGslhUcY&t=592s
kokokouki

2020/09/29 06:56

わざわざありがとうございます! とても参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問