情報(FW/ツールのバージョンなど)
言語 ruby
FW ruby on rails
(初心者でなおかつ独学の為、根本的な所から違う場合あります。すみません。
勘違いが多すぎて何処から突っ込めばいいかわからない場合は、とりあえず『エラーの解決方法』と『どう判断したか』のみで大丈夫です。)
前提・実現したいこと
rails test:models実行時に出てくる
ArgumentError: wrong number of arguments (given A, expected B)のA,Bの判断方法が知りたいです。
今までは
A=呼び出し側の引数の数 B=メソッド側の引数の数
と認識して、このエラー関係は解決していました。
ですがテスト実行時の場合の「呼び出し側の引数」はどこなのかで迷ってしまいました。
なのでちゃんと(given A, expected B)のA,Bの判断方法を教えて頂きたいです。
迷った理由
今までの ArgumentError: wrong number of arguments (given A, expected B)
のエラーでは大体引数を呼びだすフォームなどがありました。そしてそれに関連するメソッドを探して引数の数を調整していました。
ですが今回実行したテストコードの内容は
アドレスのフォーマット関係を入れた配列とeach doメソッド
のみです。
(すぐ下にソースコードも書いています)
考えれば考えるほど疑問点が出てきて、自分の考えがまとまらなくなってきたので
話口調で申し訳ありませんが、今まで考えた事を書いてみました。
出来ればこれも踏まえて、解説して貰えるとありがたいです。
=============================
アドレスのフォーマット関係を入れた配列が呼び出し側の引数なのかな?
でも引数は処理する関数とかメソッドがあって初めて引数って扱うし、
変数のみで引数として扱えるのか?
each doが手前の変数を引数として扱うメソッドだよなあ・・・。
じゃあこれが呼び出しの引数で合ってる?
%w[user@example.com USER@foo.COM A_US-ER@foo.bar.org first.last@foo.jp alice+bob@baz.cn] = valid_addresses = valid_address(each doの仮引数)
て考えたら1個だしgiven側の数字と合ってる。
じゃあB側のメソッド側の引数ってどこだろう???
メールフォーマットの検証のテストって関係ありそうなファイルはデータのバリテーション関係のコードが書いてる
user.rbぐらいしかないし・・・。
一応このファイルも終わりは end だしメソッドとして扱えるのかな?
わからない・・・。
====================
エラーコード
Running:
.....E
Error:
UserTest#test_email_validation_should_accept_valid_addresses:
ArgumentError: wrong number of arguments (given 1, expected 2)
test/models/user_test.rb:41:in test' test/models/user_test.rb:41:in
block in class:UserTest'
ソースコード
ファイル名 user_test.rb
test "email validation should accept valid addresses" do
valid_addresses = %w[user@example.com USER@foo.COM A_US-ER@foo.bar.org
first.last@foo.jp alice+bob@baz.cn]
valid_addresses.each do |valid_address|
@user.email = valid_address
assert @user.valid?, "#{valid_address.inspect} should be valid"
end
ファイル名 user.rb
class User < ApplicationRecord
VALID_EMAIL_REGEX = /\A[\w+-.]+@[a-z\d-.]+.[a-z]+\z/i
format: { with: VALID_EMAIL_REGEX }
end
回答1件
あなたの回答
tips
プレビュー