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

わけわからん。