チワワかわいいブログ

RUNTEQでrails勉強する日々の記録

2020/12/22 補講課題

ようやくrailsチュートリアル一周したので、RUNTEQのチェックテスト前の補講課題
コマンド実行して環境構築

$ git checkout -b fix_[自分のアカウント名] #作業ブランチ作る
$ rbenv local 2.6.6 #rubyのバージョンを指定
$ nodenv local 12.14.0 Node.jsのバージョンを指定 サーバサイドでJavaScript動かすらしいけど何ができるのか全然わからない
$ bundle install --without production 
$ yarn install #javascriptのパッケージマネージャ,ライブラリの追加やインストールを容易にしてくれるやつ
$ rails db:migrate
$ rails server

最初からエラーが出る、やだ

An error occurred while installing puma (4.3.3), and Bundler cannot
continue.
Make sure that `gem install puma -v '4.3.3' --source 'https://rubygems.org/'`
succeeds before bundling.

以下のコードでいけるとのことでまんまやってみた

$ gem install puma:4.3.3 -- --with-cflags="-Wno-error=implicit-function-declaration"

これを参考

【puma】puma4台インストールできない問題の対処法 - Qiita
rails severでもエラーでた

========================================
  Your Yarn packages are out of date!
  Please run `yarn install --check-files` to update.
========================================

To disable this check, please change `check_yarn_integrity`
to `false` in your webpacker config file (config/webpacker.yml).

書かれてる通りwebpacker.ymlを変更したら大丈夫だった
パッケージが古くなっていたらエラーになってパッケージを最新の状態に保つ手助けになるオプションとのこと
晴れてserverも立ち上がったので、とりあえず最初のテスト
安川先生がいなくて不安・・ とりあえずエラーを書き出してみる

Error:
UserTest#test_success_to_visit_about_page:
NameError: undefined local variable or method `about_url' for #<UserTest:0x00007fd0ada5dd60>
    test/system/user_test.rb:49:in `block in <class:UserTest>'

Error:
UserTest#test_login_failed_with_not_exist_user:
NoMethodError: undefined method `authenticate' for nil:NilClass
    app/controllers/sessions_controller.rb:6:in `create'

Error:
UserTest#test_logout_success:
NoMethodError: undefined method `log_in' for #<SessionsController:0x00007fd09899f5c8>
Did you mean?  login_url
Did you mean?  login_url
    app/controllers/sessions_controller.rb:7:in `create'

Error:
UserTest#test_login_success_with_exist_user:
NoMethodError: undefined method `log_in' for #<SessionsController:0x00007fd0c81e8ae8>
Did you mean?  login_url
Did you mean?  login_url
    app/controllers/sessions_controller.rb:7:in `create'

Failure:
UserTest#test_signup_success_with_valid_user [/Users/workplace/runteq/Exam_RailsBasic_01/test/system/user_test.rb:37]:
expected to find text "Signup success!" in "RUNTEQ APP\nLog in\nSign up\nThe form contains 3 errors.\nPassword can't be blank\nPassword is too short (minimum is 6 characters)\nPassword can't be blank\nName\nEmail\nPassword\nConfirmation"

テスト一個ずつ見ていく

  test "success to visit about page" do
    visit about_url
    assert_text "StaticPages#about"
  end

routes.rbを修正して、コントローラにアクション追加して、about.rbのファイル名修正したんだけどこれでいいのか?
もう一回テストしたらエラーメッセージ異常になったけど一旦無視

  test "login failed with not exist user" do
    visit login_url
    fill_in "Email", with: "other_user@example.com"
    fill_in "Password", with: "foobar"
    click_button "Log in"
    assert_no_text "Example User"
  end

これはnilガードっぽいのでsessionsコントローラのcreateアクションを修正

  test "logout success" do
    login
    click_on "Account"
    click_on "Log out"
    assert_text "Log in"
  end

log_inメソッドがあるsessionhelperをincludeしてみる

  test "signup success with valid user" do
    visit signup_url
    fill_in "Name", with: "Another User"
    fill_in "Email", with: "another_user@example.com"
    fill_in "Password", with: "foobar"
    fill_in "Confirmation", with: "foobar"
    click_button "Create my account"
    assert_text "Signup success!"
    assert_text "Another User"
  end

最後のはvalidation、userコントローラのcreateアクション、singupのテンプレートあたりがおかしそう
と思ったらstrong_parameterにpasswordがなかった
修正したけど、エラー出る
userコントローラでもlog_inメソッド使いたいとのことなので、includeをapplicationcontrollerに描き直し
で終わり!