ユーザが値を選択したことを検証する方法を知りたい。Railsでドロップダウンリストの存在を検証する方法
私collection_select
は次のとおりです。一般的には、ビューのテストのために
= f.collection_select :person_id, @employee, :id, :fullName, {prompt: "Select employee"}, {class: "form-control"}
ユーザが値を選択したことを検証する方法を知りたい。Railsでドロップダウンリストの存在を検証する方法
私collection_select
は次のとおりです。一般的には、ビューのテストのために
= f.collection_select :person_id, @employee, :id, :fullName, {prompt: "Select employee"}, {class: "form-control"}
:
validates :person, :presence => true
これは、選択しperson_id
だけではなく、存在していたが、それはまた、既存のPerson
に属していることを保証します。
エラーがある場合、:person
にエラーが追加され、person_id
には追加されません。検証エラーの表示方法によっては、object.errors[:person]
のようなエラーをチェックする必要があります。
あなたはperson_id
フィールドの横のエラーを提示したいのですが、あなたのビューを更新することはできません、あなたはperson
をチェックcustom validationを使用したいが、person_id
にエラーを追加可能性があります
validate :person_existing
private
def person_existing
errors.add(:person_id, :missing) if person.blank?
end
が、私はコントローラのアクションから返されたHTMLに対してテストを書くでしょう。これは、ブラウザ内テストを行わない(つまり、Webドライバ/ヘッドレスブラウザを使用する必要がない)という利点をもたらします.HTMLを適切にレンダリングすることは個々のブラウザに任されているため、コントローラーアクションから返されたHTMLが正しいことを確認します。
ユーザーが特定のアイテムを選択したときに、そのアイテムが選択されていることを確認するには...実際にブラウザを使用してそのジョブを実行するのは実際のところですそれをテストする。しかし、あなたはタグの属性(see here)を確認することができます。
これは確かにあなたが何をしようとしている場合、ビューテストであまりにも狂っていないと言われました。このビューは、頻繁に変更される大部分のアプリケーションの一部であり、非常に脆弱です。テストスイートでビューの変更をたくさん追跡しているかもしれません。
私が使用する
あなたはなぜ知っていますか検証では検証エラーは表示されません。何も選択せずに[作成]をクリックすると、何も起こりません。 –
私はsimple_form gemを使用しており、他のフィールドからのエラーを表示しますが、collection_selectは反応しません。私はobject.errors.full_messagesを使用し、このショーのエラーは正しく表示されます。 –
@ŁukaszKorol私はあなたの質問に答えるために私の答えを更新しました。 – spickermann