如何测试表单文本字段没有值?

时间:2012-05-04 14:20:14

标签: ruby-on-rails rspec capybara rspec-rails

如何测试没有值的文本表单字段,例如以下情况:

<input class="string required" id="student_name" name="student[name]"
       size="50" type="text" />

我知道如果存在一个值,您将拥有:

<input class="string required" id="student_name" name="student[name]"
       size="50" type="text" value="John" />

您可以进行测试以确保表单字段预填充了名称“John”,其中包含以下内容:

it "should display an enmpty field for the student name" do
  rendered.should have_selector("input", :type => "text",
                                         :name => "student[name]",
                                         :value => "John")
end

我尝试指定“:value =&gt; nil”,但这不起作用。

有关have_selector()的文档非常简陋,因此无法在那里找到任何内容,也无法通过搜索找到任何示例(可能使用错误的术语进行搜索)。

根据建议,我也尝试了:value => '',但收到以下错误消息:

expected following output to contain a <input type='text' name='vendor[name]' value=''/>

当我尝试:value => nil时,收到以下错误消息:

 NoMethodError:
   undefined method `include?' for nil:NilClass

答案
解决方案是使用:value => "":value => ""

我最初没有在我的案例中工作的原因是我在我的Gemfile中包含了webrat和capybara宝石。删除webrat后,它使用两种解决方案。

2 个答案:

答案 0 :(得分:0)

尝试将值指定为“”

it "should display an enmpty field for the student name" do
    rendered.should have_selector("input", :type => "text",
                                     :name => "student[name]",
                                     :value => "")
end

答案 1 :(得分:0)

@Unixmonkey在评论中说的应该有效。你也可以这样做:

page.first(:css, "#student_name")[:value].should be_nil

编辑哦,我猜@ Unimonkey的评论根据您的更新无法正常运行,但上述内容将有效 - 我已经测试过了。

编辑2回复:评论请尝试此操作,因为您处于视图规范中:

selector = css_select("#student_name").first
selector["value"].should be_nil