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

hea*_*thd 5 ruby ruby-on-rails testunit ruby-on-rails-3.1

我正在使用testunit 2.4.0为rails 3.1 app编写控制器测试.

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

我正在使用这样的assert_select:

assert_select 'h1', {:text => /Key Dates/, :count => 0}
Run Code Online (Sandbox Code Playgroud)

并收到以下错误:

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

我已经跟踪了这个事实,即创建一个实例并将其传递给测试单元的assert_select调用.但是在testunit 2.2版(2011年2月)中添加了检查,检查传入的消息的类型.这些检查触发了上面看到的.build_messageAssertionMessageassertArgumentError

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

你能建议如何最好地跟进吗?任何解决方法?

jef*_*unt 0

因此,assert_select 文档显示了以下示例,传入一个块:

assert_select "ol" do |elements|
  elements.each do |element|
    assert_select element, "li", 4
  end
end
Run Code Online (Sandbox Code Playgroud)

那么如果你做了类似的事情怎么办?

assert_select 'h1' do |elements|
  elements.length == 0 ? fail
  elements.each do |element|
    element.text ~= /Key Dates/ ? fail
  end
end
Run Code Online (Sandbox Code Playgroud)

如果找到模式或元素数量h1为零,则基本上会失败。显然,您会更改条件以匹配您要测试的内容,但这会让您更接近您需要的吗?