capybara で page.should have_field(’Password’, :with => ’
Rails の request spec を書いてて、バリデーションが失敗した時に入力したパスワードの欄をクリアしたいとする。
こんなテストを書いた
describe "不正な入力がされた場合、パスワード欄はクリアされる" do before do visit signup_path fill_in 'パスワード', :with => 'Passw0rd' fill_in '確認用パスワード', :with => 'PaMMord' click_button '登録' end subject { page } it { should have_field('パスワード', :with => '') } it { should have_field('確認用パスワード', :with => '') } end
しかし失敗。
1) Users サインアップする 不正な入力がされた場合、パスワード欄はクリアされる Failure/Error: it { should have_field('パスワード', :with => '') } expected #has_field?("パスワード") to return true, got false # ./spec/requests/users_spec.rb:39:in `block (4 levels) in <top (required)>' 2) Users サインアップする 不正な入力がされた場合、パスワード欄はクリアされる Failure/Error: it { should have_field('確認用パスワード', :with => '') } expected #has_field?("確認用パスワード") to return true, got false # ./spec/requests/users_spec.rb:40:in `block (4 levels) in <top (required)>'
これだと通る
describe "不正な入力がされた場合、パスワード欄はクリアされる" do before do visit signup_path fill_in 'パスワード', :with => 'Passw0rd' fill_in '確認用パスワード', :with => 'PaMMord' click_button '登録' end subject { page } it { find_field('パスワード').text.should be_empty } it { find_field('確認用パスワード').text.should be_empty } end
わけわからん。