2009-05-28 34 views
7

我正在尝试测试以查看输入字段是否与我的工厂中的某个字段为空。你如何测试一个空的输入字段?

address => {:first_name => '', :last_name => ''} 

当什么在输入字段我一直在使用这种检查:

assert_select '#first_name[value=?]', address.first_name 

除此之外,如果第一个名字是空白不起作用。我会得到这个错误,测试失败。

Expected at least 1 element matching "#first_name[value='']", found 0. 
<false> is not true. 

这很有意义,因为生成的代码将不具有值属性。有没有更好的方法来验证输入字段的值?

从现在开始测试,我可以检查地址字段是否为空,然后检查是否有没有值属性的输入字段。但是这是混乱和冗长的。一个普遍的检查工作,但的

例子是冗长:

if address.first_name.blank? 
    assert_select '#first_name[value]', 0 
    assert_select '#first_name[type=text]', 1 
else 
    assert_select '#first_name[value=?]', address.first_name 
end 

相关信息我使用:
角度来说,Hpricot 0.8.1
引入nokogiri 1.1.1
的Rails 2.2.2
Thoughtbot -Shoulda 2.0.5
Webrat 0.4.1

+0

[在Ruby on Rails测试中如何声明输入元素为空](http:// stackoverflow.com/questions/6308158/how-to-assert-that-an-input-element-is-empty-in-ruby-on-rails-tests) – jasondoucette 2016-08-10 13:13:19

回答

1

也许你可以使用:

assert_select "#first_name" do 
    assert_select "[value=?]", address.first_name unless address.first_name.blank? 
end 

我不认为我能把它缩短。如果它是测试用例中的重复模式,那么可以将它提取到自定义断言:

def assert_has_value_unless_blank(selector, value) 
    assert_select selector do 
    assert_select "[value=?]", value unless value.blank? 
    end 
end 

assert_has_value_unless_blank "#first_name", address.first_name 
+4

这似乎没有测试输入元素是空的,如果传入的值为空,它只会跳过value属性的测试。 – harald 2011-06-10 15:04:22