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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

Q&A

解決済

2回答

3242閲覧

Railsにてエラー"wrong number of arguments (given 2, expected 1)"

Usurai

総合スコア38

Ruby on Rails

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

0グッド

0クリップ

投稿2022/02/04 10:56

編集2022/02/04 10:58

経緯

プログラミング初学者です。
Rails tutorial7章にて発生したタイトルにあるエラーに苦戦し、最終的に強引に?解消したことがあり、
現在9章にてtestがfailureしてしまう問題に直面したのですが、自身での原因の特定に苦戦しており
以前7章で行った変更が原因になってしまっている可能性があるなと感じる

目的

  • 以前行った変更に問題がないか明確にしたい
  • もし問題があるならなにか取れそうな対処法はあるか知りたい

*かなり初歩的な問題かもしれませんがヒントや参考になりそうなことでも教えていただけるとありがたいです。

以前行った変更

Rails tutorial7章integration testにおいて
wrong number of arguments (given 2, expected 1)が表示されてしまう問題に対して、
同じ問題に関する質問の解答にあった対処法を行った。

Rails tutorialのサンプルコード↓ (errorとなってしまう)

ruby

1post login_path, params: { session: { email: @user.email, 2 password: "invalid" } }

↓ ↓ ↓ given 2 expected 1とあるのでコンマを消した(errorは解消,testパス)

ruby

1post login_path params: { session: { email: @user.email, 2 password: "invalid" } }

上の変更を加えたテストの全体部です ↓

ruby

1require "test_helper" 2 3class UsersLoginTest < ActionDispatch::IntegrationTest 4 def setup 5 @user = users(:shuhei) 6 end 7 test "login with valid email/invalid password" do 8 get login_path 9 assert_template 'sessions/new' 10 post login_path params: { session: { email: @user.email, 11 password: "invalid" } } 12 # *got failure message from the line below "Expected true to be nil or false" 13 assert_not is_logged_in? 14 assert_template 'sessions/new' 15 assert_not flash.empty? 16 get root_path 17 assert flash.empty? 18 end

同じエラーがでる箇所複数を同じ方法で修正しました。
そもそもカンマを抜くことによって文法的に後述のparamsが通らなくなったりと、本来の目的であるログインのテストがうまく実行されなくなってしまっているのでしょうか?

よろしくお願いします

補足

現在出てしまっているFailure情報

上のコードブロックのコメント(自身でFailure原因部分がわかるように追加した)
*got failure message from the line below "..."の部分の直下がline25です

FAIL["test_login_with_valid_information_followed_by_logout", #<Minitest::Reporters::Suite:0x000000013f318c48 @name="UsersLoginTest">, 1.2272799999918789] test_login_with_valid_information_followed_by_logout#UsersLoginTest (1.23s) Expected false to be truthy. test/integration/users_login_test.rb:25:in `block in <class:UsersLoginTest>'

現在、似たような構造のテストで3ヶ所Failureが出てしまってします、いずれの場所も、上の方で書いた「以前行った変更」が入っているブロックだったのでそこに問題があるのかと思った次第です。

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

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

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

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

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

guest

回答2

0

自己解決

GemをRails tutorialにて推奨されているバージョンに固定してアプリを作り直したところ、同じ文法でもエラーなしで通りました。Gemのバージョン間のなにかしらの齟齬によるbugかと思います

投稿2022/03/07 08:17

Usurai

総合スコア38

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

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

0

ruby 特有のカッコ省略が理解を難しくしていますね
カッコをつけてみますと

カンマあり

ruby

1post( login_path, params[xxxx] ) 2# post に引数を2つ渡してしまう状態 => エラー

カンマなし

ruby

1post( login_path params[xxxx] ) 2# すなわち↓と同じ 3 4post( login_path( params[xxxx] ) ) 5# login_path メソッドにパラメーターを引数として渡し、その戻り値をpostメソッドに渡している。 6# post メソッドは期待通り、1つだけ引数をもらったのでエラーにならない

投稿2022/02/07 04:12

polo

総合スコア108

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

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

Usurai

2022/02/12 06:16

回答ありがとうございます、返信遅れてしまって申し訳ないです 引数が2つになってしまっていたので、1つに強引に変えたのでエラーにならなくなったとこまでは自分でそうしたので理解しているのですが、 そうしてしまっても文法的に問題なく、paramsの通したい値は通るという認識でよかったのでしょうか? Rails Tutorialに沿って進めていて、そこの[サンプルコード](https://github.com/yasslab/sample_apps/blob/main/6_0/ch09/test/integration/users_login_test.rb) 9行目からのテスト ではカンマが入っているのでそこに問題があったと思っていました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問