前提・実現したいこと
Railsテストを書いていて発生したエラーを解決したい
下記アプリ内にRailsテストを書いています。
https://github.com/mkakiz/tadakashi_app/tree/rails-test
rails
1(app/test/controllers/home_controller_test.rb) 2require 'test_helper' 3 4class HomeControllerTest < ActionDispatch::IntegrationTest 5 test "should get about" do 6 get about_url 7 assert_response :success 8 end 9end
rails
1get "about", to: "home#about"
rails
1(controllers/home_controller.rb) 2 def about 3 end
上記のテストで私の認識としては以下のようになると思っています。
・Aboutページに対してテストを行う
・GETリクエストをAboutアクションに対して行う
・リクエストに対するレスポンスは[成功]になる…はず
発生している問題・エラーメッセージ
しかしテストは以下のエラーとなりました。
(home_controller_test.rb:4 は test "should get about" do です)
Error: HomeControllerTest#test_should_get_about: Mysql2::Error: Field 'user_id' doesn't have a default value Error: HomeControllerTest#test_should_get_about: NoMethodError: undefined method `each' for nil:NilClass bin/rails test test/controllers/home_controller_test.rb:4 Finished in 0.570363s, 1.7533 runs/s, 0.0000 assertions/s. 1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
試したこと
’Each’についてはどれについてはそもそもどれを指しているのかが分からなかったのですが、
‘Mysql2’については下記のページに「MySQLの設定ファイル(my.cnf)を書き換えましょう」という記述が見つかりました。
https://qiita.com/seltzer/items/3096f0805440bfa19bff
しかし残念ながら該当ファイルを見つけられずにいます。
MySQLはインストールしていますので、設定ファイルはあると思うのですが…。
% mysql --version mysql Ver 8.0.19 for osx10.15 on x86_64 (Homebrew)
すみませんが、アドバイスをお願いします。
追加:
(about.html.erb) <div class="about-main" align="center"> <h2>タダカシとは</h2> <p> ... </p> <img class="about-img" src="/gift.jpg"> </div>
(application.html.erb) <!DOCTYPE html> <html> <head> <title>タダカシ</title> <!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> <!-- Optional theme --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous"> <%= csrf_meta_tags %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> </head> <body> <header> <div class="header-logo"> <% if @current_user %> <button type="submit" class="btn btn-success"><%= link_to("タダカシ", "/posts/index") %></button> <% else %> <button type="submit" class="btn btn-success"><%= link_to("タダカシ", "/") %></button> <% end %> </div> <ul class="header-menus"> <% if @current_user %> <li> <%= link_to(@current_user.name, "/users/#{@current_user.id}") %> </li> <li> <button type="submit" class="btn btn-primary"><%= link_to("投稿一覧", "/posts/index") %></button> </li> <li> <button type="submit" class="btn btn-primary"><%= link_to("新規投稿", "/posts/new") %></button> </li> <li> <button type="submit" class="btn btn-primary"><%= link_to("ユーザー一覧", "/users/index") %></button> </li> <li> <button type="submit" class="btn btn-primary"><%= link_to("ログアウト", "/logout", {method: :post}) %></button> </li> <% else %> <li> <button type="submit" class="btn btn-success"><%= link_to("タダカシとは", "/about") %></button> </li> <li> <button type="submit" class="btn btn-primary"><%= link_to("新規登録", "/signup") %></button> </li> <li> <button type="submit" class="btn btn-primary"><%= link_to("ログイン", "/login") %></button> </li> <li> <button type="submit" class="btn btn-warning"><%= link_to("かんたんログイン", "/guest_login") %></button> </li> <% end %> </ul> </header> <% if flash[:notice] %> <div class="flash"> <%= flash[:notice] %> </div> <% end %> <%= yield %> </body> </html>
(user_controller.rb) def login @user = User.find_by(email: params[:email]) if @user && @user.authenticate(params[:password]) session[:user_id] = @user.id flash[:notice] = "ログインしました" redirect_to("/posts/index") else @error_message = "メールアドレスまたはパスワードが間違っています" @email = params[:email] @password = params[:password] render("users/login_form") end end def logout session[:user_id] = nil flash[:notice] = "ログアウトしました" redirect_to("/login") end
回答2件
あなたの回答
tips
プレビュー