2011-09-29 47 views
5

我正在写一个使用testunit 2.4.0的rails 3.1应用程序的控制器测试。ArgumentError:断言消息必须是字符串或PROC使用assert_select

我想断言某个标题没有出现在页面上。

我使用assert_select这样的:

assert_select 'h1', {:text => /Key Dates/, :count => 0} 

,并得到以下错误:

ArgumentError: assertion message must be String or Proc: <</Key Dates/> 
expected but was <"Planner Maternity leave">.>(<Test::Unit::Assertions::AssertionMessage>) 

我跟踪下来到assert_select电话build_message它创建的实例的事实AssertionMessage并将其传递给测试单元的assert。然而,在testunit版本2.2(2011年2月)中添加了检查传入的消息类型的检查。这些检查触发上面看到的ArgumentError

我不确定错误在于测试单元是否过度严格或者assert_select是否传递了错误的对象类型。

你能建议如何最好地遵循这个?任何解决方法?

+0

是问题那''text'中的值应该是一个字符串,而不是一个模式? – jefflunt

+0

嗨,不,这是完全可以接受的:文本是一个正则表达式 – heathd

回答

0

所以,assert_select documentation显示下面的例子中,传递一个块:

assert_select "ol" do |elements| 
    elements.each do |element| 
    assert_select element, "li", 4 
    end 
end 

所以,如果它发现模式,如果你不喜欢的东西......

assert_select 'h1' do |elements| 
    elements.length == 0 ? fail 
    elements.each do |element| 
    element.text ~= /Key Dates/ ? fail 
    end 
end 

这基本上失败或者如果h1元素的数量为零。显然你会改变条件来匹配你想要测试的东西,但是这会让你更接近你需要的东西吗?

0

如果您不能升级到无缺陷的版本,你可以传递第三个参数(消息),所以你不要逼消息建:

assert_select 'h1', {:text => /Key Dates/, :count => 0}, "Unexpected Key Dates found."

相关问题