capybaraを使用してログインフォームをテストしようとしていますが、電子メールまたはパスワードフィールドは見つかりません。Capybaraが正しいIDでフォームフィールドを見つけることができません
私は正しいIDを使用していることを確認するためにページソースを確認しましたが、フィールド名を使用しても試しました。
it "returns http success" do
user = FactoryGirl.create(:user)
visit sessions_new_path
fill_in 'email', :with => user.email
fill_in 'password', :with => user.password
click_button('submit')
expect(response).to have_http_status(:success)
end
マイ形式:
= form_for(:session, url: login_path, :html => {class: 'login_form'}) do |f|
.field
= f.email_field :email, 'data-msg-required' => t('email_required'), :placeholder => t('.form_email'), id: 'email'
.field
= f.password_field :password, 'data-msg-required' => t('password_required'), :placeholder => t('.form_pwd'), id: 'password'
= f.submit t('.form_sbmt'), class: 'btn-submit'
IDが(それぞれのフィールド用)メールアドレスとパスワードとしてリストされているページのソースを表示し、名前をここで
は私の現在のテストです「session [email]」の形式に従ってください。私はfill_inのために "sessions [email]"(とパスワードのためのequiv)を使ってみましたが、運がありませんでした。エラー私は取得しています:任意の助けをいただければ幸いです
Failure/Error: fill_in 'email', :with => user.email
Capybara::ElementNotFound:
Unable to find field "email"
。
Capybaraをコントローラテストで使うべきではありません。これはフィーチャテスト(そしてビューテストのマーシャー)のためです。 –
私はそれを認識していますが、私のセッションの作成アクションをテストする方法がわかりませんでした。私が投稿を投稿しようとしたとき、私はそれを動作させることができませんでした。 – Isengrim
コントローラテストで間違ったことをテストしているようです。完全なコントローラ/ビュー/ルーティングテストを行う場合は、機能テストを行う必要があります。コントローラテストを作成する場合は、コントローラが設定した変数とコントローラアクションからの応答のみをテストする必要があります。あなたの例では、コントローラテストは基本的に 'post:create、session:{email:user.email、password:user.password}のようなものです。期待(応答)... ' –