RoRでtweeterのようなウェブアプリを作っています。
RSpecでユーザの登録時のバリデーションテストを実行している際に疑問に思ったことがありました。
includeマッチャは、引数にとった値がexpectの引数である配列に含まれているかをチェックすることができるマッチャであるそうですが、nicknameが7文字以上であれば登録できないことについてのテストコードで配列の要素指定[0]をしなくてはエラーになってしまいます。[0]の指定をしなくてはならない理由がわかりません。
発生している問題・エラーメッセージ
Failures: 1) User#create is invalid with a nickname that has more than 7 characters Failure/Error: expect(user.errors[:nickname]).to include("is too long") expected ["is too long (maximum is 6 characters)"] to include "is too long"
該当のソースコード
it "is invalid with a nickname that has more than 7 characters " do user = build(:user, nickname: "aaaaaaaa") user.valid? expect(user.errors[:nickname][0]).to include("is too long") end
試したこと
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
it "is invalid without a nickname" do
user = build(:user, nickname: nil)
user.valid?
expect(user.errors[:nickname]).to include("can't be blank")
end
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
上記のnicknameが空の場合のテストコードでは要素[0]の指定をしなくてもうまくいきました。
上に示し2つののソースコードの user.valid? の次の行にbinding.pryを置いて
user.errorsの中身を確認して見た結果
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
["is too long (maximum is 6 characters)"]
["can't be blank"]
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
どちらも配列の形式でした。
補足情報(FW/ツールのバージョンなど)
rspec-rails 3.7.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。