我正在使用testunit 2.4.0为rails 3.1 app编写控制器测试。
我想断言某个标题没有出现在页面上。
我正在使用这样的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 :(得分: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
元素的数量为零,则基本上失败。显然你会改变条件以匹配你想要测试的东西,但是这会让你更接近你需要的东西吗?
答案 1 :(得分:0)
如果您无法将升级到无错误版本,您只需传递第三个参数(消息),这样就不会强制构建消息:
assert_select 'h1', {:text => /Key Dates/, :count => 0}, "Unexpected Key Dates found."