

# 環境

Rails 6.0.4  
Ruby 3.0.2  
Docker

RailsチュートリアルにDockerで環境構築をして開発を行っています  
現在10章まで進んでいるのですが、minitestでテストを行っており、機能実装前の受け入れテストコードを毎度書いていくのですが、テストコードを書くたびに必ず、「呼び出し側の引数の数」と「メソッド側の仮引数」ズレでエラーが起きてしまいます

# エラー文

▼ターミナル

[code]

    $ docker-compose exec web bundle exec rails test
    Running via Spring preloader in process 2821
    Started with run options --seed 33308
    
    ERROR["test_should_redirect_update_when_not_logged_in", #<Minitest::Reporters::Suite:0x0000aaab11031490 @name="UsersControllerTest">, 0.3196210830064956]
     test_should_redirect_update_when_not_logged_in#UsersControllerTest (0.32s)
    Minitest::UnexpectedError:         ArgumentError: wrong number of arguments (given 2, expected 1)
                test/controllers/users_controller_test.rb:22:in `block in <class:UsersControllerTest>'
    
    test/21: [=============================================================================            ] 87% Time: 00:00:01,  ETA: 00:00:00
      24/24: [========================================================================================] 100% Time: 00:00:01, Time: 00:00:01
    
    Finished in 1.93922s
    24 tests, 46 assertions, 0 failures, 1 errors, 0 skips
    
[/code]

# エラーが出ているところのテストを記述している部分

▼test/controllers/users_controller_test.rb

[code]

    require 'test_helper'
    
    class UsersControllerTest < ActionDispatch::IntegrationTest
    
      def setup
        @user = users(:michael)
        @other_user = users(:archer)
      end
    
      test "should get new" do
        get signup_path
        assert_response :success
      end
    
      test "should redirect edit when not logged in" do
        get edit_user_path(@user)
        assert_not flash.empty?
        assert_redirected_to login_url
      end
    
      test "should redirect update when not logged in" do
        patch user_path(@user), params: { user: { name: @user.name, email: @user.email } } # 22行目
        assert_not flash.empty?
        assert_redirected_to login_url
      end
    
      # test "should redirect edit when logged in as wrong user" do
      #   log_in_as(@other_user)
      #   get edit_user_path(@user)
      #   assert_flash.empty?
      #   assert_redirected_to root_url
      # end
    
      # test "should redirect update when logged in as wrong user" do
      #   log_in_as(@other_user)
      #   patct user_path(@user), params: { user: { name: @user.name, email: @user.email } }
      #   assert_flash.ematy?
      #   assert_redirected_to root_url
      # end
    end
    
[/code]

▼test/test_helper.rb

[code]

    ENV['RAILS_ENV'] ||= 'test'
    require_relative '../config/environment'
    require 'rails/test_help'
    require "minitest/reporters"
    Minitest::Reporters.use!
    
    class ActiveSupport::TestCase
      fixtures :all
      include ApplicationHelper
    
      # テストユーザーがログイン中の場合にtrueを返す
      def is_logged_in?
        !session[:user_id].nil?
      end
    
      # テストユーザーとしてログインする
      def log_in_as(user)
        session[:user_id] = user.id
      end
    end
    
    class ActionDispatch::IntegrationTest
    
      # テストユーザーとしてログインする
      def log_in_as(user, password: 'password', remember_me: '1')
        post login_path, params: { session: { email: user.email, password: password, remember_me: remember_me } }
      end
    end
    
[/code]

# これまでやったこと

どうしてこのエラーが発生するのかは、色々ググってみて下記の記事を参考に知ることができましたが、実際自分のコードのどのようにあてはめたら良いのかわかりません。お力を貸してください！

[ArgumentError: wrong number of arguments (given A, expected
B)のA,Bの引数の判断方法](https://qiita.com/yo0917/items/20c165a3b06805bf2e37)

[サンプルコードでわかる！Ruby 3.0の主な新機能と変更点 Part 2 -
新機能と変更点の総まとめ](https://zenn.dev/jnchito/articles/24e0bd7fd1045d#hash%23each%E3%81%8C%E5%BF%85%E3%81%9A2%E8%A6%81%E7%B4%A0%E3%81%AE%E9%85%8D%E5%88%97%E3%82%92%E6%B8%A1%E3%81%99%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F)


CC BY-SA 4.0
2021-11-10T01:47:26.230
83534
2023-07-13T14:08:26.210
2021-11-10T09:46:29.313
36066
36066
question
ruby-on-rails ruby テスト
RailsテストのArgumentError: wrong number of arguments (given 2, expected 1)を解決したい


以下のように記述してparamsの前のカンマを削除してみるとどうでしょうか？

[code]

    patch user_path(@user) params: { user: { name: @user.name, email: @user.email } }
    
[/code]

参考記事  
[Railsチュートリアル 第７章 リスト7.23のテストでArgumentError: wrong number of arguments (given
2, expected 1)](https://qiita.com/syo19961113/items/c0c7f89a51954199fca0)


CC BY-SA 4.0
2022-08-18T16:33:31.157
90620
2022-08-20T11:11:30.533
2022-08-20T11:11:30.533
3060
54050
83534
answer