与assert_select相反?

时间:2012-01-26 21:36:13

标签: ruby-on-rails functional-testing

我正在编写一个应用程序,其中需要检查视图是否具有某些功能 - 特别是因为该功能必须仅呈现给某个安全组中的用户。我正在寻找assert_selects的反面,以便看到菜单呈现。

4 个答案:

答案 0 :(得分:51)

在这里查看文档:

http://apidock.com/rails/ActionController/Assertions/SelectorAssertions/assert_select

来自文档:

assert_select是assertion that selects elements and makes one or more equality tests.

并从等式测试部分:

  

相等测试可能是以下之一:

     

true - 如果至少选择了一个元素,则断言为真。

     

false - 如果未选择任何元素,则断言为真。

     

String / Regexp - 如果文本值至少为1,则断言为true   element匹配字符串或正则表达式。

     

整数 - 如果恰好有多少元素,则断言为真   地选择。

     

范围 - 如果所选元素的数量适合,则断言为真   范围。

     

如果未指定相等测试,则断言为真,如果至少有一个   元素选择。

一个简单的例子:

   # Page contains no forms
   assert_select "form", false, "This page must contain no forms"

答案 1 :(得分:33)

不要忘记你总是可以传递计数,并将其设置为零。

assert_select "a", {count: 0, text: "New"}, "This page must contain no anchors that say New"

答案 2 :(得分:2)

我遇到了这个问题,以确保在许多按钮中没有“删除”按钮。接受的答案在这种情况下不起作用,因为已有几个按钮。

assert_select '.button' do |btn|
  btn.each do |b|
    assert_no_match 'Delete', b.to_s
  end
end

但是,我更喜欢GantMan的答案!

答案 3 :(得分:0)

您可以轻松定义自己的:

module ActionDispatch::Assertions::SelectorAssertions
  def refute_select(*a,&b)
    begin
      assert_select(*a,&b)
    rescue AssertionFailedError
      return
    end
    raise "fail" # there should be a better built-in alternative
  end
end