2012-05-28 178 views
1

我正在测试我的Rails应用程序的RSpec和水豚注册表单。当我想测试我面对这个错误,水豚:: ElementNotFound:

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: [email protected]</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> 

我的测试文件是规范/请求/ user_spec.rb

require 'spec_helper' 

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

    fill_in "Email",     :with => "[email protected] " 
    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 

你有什么想法解决它?

回答

2

嗯,这里的错误表明它找不到标签为“确认”的文本框。这里你有问题的HTML。有没有带有确认标签的文本框。您可以通过点击“确认”标签进行测试,光标将不在password_confirmation文本框中。

查看区别为什么点击“密码”标签,光标在密码文本框中。这就是为什么password字段没有错误。您可以将标记更改为f.label :password_confirmation

当您看到错误Capybara::ElementNotFound时,它意味着它找不到您引用的元素。因此你需要检查你的标记是否正确。

+0

感谢您的回答,但对我来说有一个令人困惑的地方。当我在浏览器中查看我的应用程序html源代码时,我看到。请问这是一个问题吗? – ndrx42

+0

rails生成的视图:”#{modelname} _#{fieldname}“,和“#{modelname} [#{fieldname}]”作为名称属性。id使得人们可以轻松地从javascript访问,并命名为将数据提交回rails。 – Chamnap

相关问题