1

RailsアプリのサインアップフォームをRSpecとCapybaraでテストしています。それをテストしたいとき、私はこのエラーに直面します、

Failures:

  1) user registration allows new users to register with an email address and password
     Failure/Error: fill_in "Confirmation",          :with => "foo"
     Capybara::ElementNotFound:
       no text field, text area or password field with id, name, or label 'Confirmation' found
     # ./user_spec.rb:9:in `block (2 levels) in <top (required)>'

これはサインアップフォームである私のフォームです、

<div id="box">
  <div class="block" id="block-signup">
    <h2>Sign up</h2>
    <div class="content">
      <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :class => "form login"}) do |f| %>
          <% if @user.errors.any? %>
              <div id="errorExplanation">
                <h2><%= pluralize(@user.errors.count, "error") %> prohibited
                  this post from being saved:</h2>
                <ul>
                  <% @user.errors.full_messages.each do |msg| %>
                      <li><%= msg %></li>
                  <% end %>
                </ul>
              </div>
              <%end%>
        <div class="group wat-cf">
          <div class="left">
            <label class="label"><%= f.label :email %></label>
          </div>
          <div class="right">
            <%= f.email_field :email %>
            <span class="description">Ex: test@example.com</span>
          </div>
        </div>
        <div class="group wat-cf">
          <div class="left">
            <label class="label"><%= f.label :password %></label>
          </div>
          <div class="right">
            <%= f.password_field :password %>
            <span class="description">Must contains the word 'yeah'</span>
          </div>
        </div>
        <div class="group wat-cf">
          <div class="left">
            <label class="label"><%= f.label :confirmation %></label>
          </div>
          <div class="right">
            <%= f.password_field :password_confirmation %>
            <span class="description">Don't miss any letters</span>
          </div>
        </div>

        <div class="group navform wat-cf">
          <button class="button" type="submit">
            <%= f.submit "Sign in", :type => :image, :src => "http://pilu.github.com/web-app-theme/images/icons/tick.png" %>
          </button>
        </div>
      <% end %>
    </div>
    <div id="links-sup">
      <h4><%= render "links" %></h4></div>
  </div>
</div>

そして私のテストファイルはspec/requests/user_spec.rbです

require 'spec_helper'

describe "user registration" do
  it "allows new users to register with an email address and password" do
    visit "/users/sign_up"

    fill_in "Email",                 :with => "user@eample.com "
    fill_in "Password",              :with => "foo"
    fill_in "Confirmation",          :with => "foo"

    click_button "Sign up"

    page.should have_content("Welcome! You have signed up successfully.")
  end
end

あなたはそれを解決するためのアイデアがありますか?

4

1 に答える 1

2

ここでのエラーは、「確認」というラベルの付いたテキストボックスが見つからないことを示しています。ここでは、htmlに問題があります。確認ラベルの付いたテキストボックスはありません。そのラベル「確認」をクリックしてテストできます。カーソルはテキストボックスにありませんpassword_confirmation

「パスワード」ラベルをクリックする理由の違いを確認してください。カーソルはパスワードテキストボックスにあります。passwordそのため、フィールドにエラーはありません。

マークアップを少し変更できますf.label :password_confirmation

エラーが表示された場合Capybara::ElementNotFound、それは単に、参照している要素が見つからないことを意味します。したがって、マークアップが正しいことを確認する必要があります。

于 2012-05-28T15:00:07.833 に答える