ArgumentError:断言消息必须是使用assert_select的String或Proc

时间:2011-09-29 13:19:46

标签: ruby-on-rails ruby ruby-on-rails-3.1 testunit

我正在使用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是否传递了错误的对象类型。

你能告诉我如何最好地遵循这个规定吗?任何解决方法?

2 个答案:

答案 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."

相关问题