2012-01-26 53 views
33

我正在编写一个应用程序,希望检查视图是否有而不是具有某些功能 - 特别是因为该功能只能呈现给特定安全组中的用户。我正在寻找与assert_selects相反的命令,以便看到呈现的菜单是而不是assert_select的反义词?

回答

41

看看该文档在这里:

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

从文档:

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

和来自平等测试s ections:

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

真 - 如果选择的至少一种元素断言是真实的。

false - 如果没有选择元素,声明为true。

字符串/正则表达式 - 如果至少有一个 元素的文本值与字符串或正则表达式匹配,则声明为true。

整数 - 如果所选元素的数量正好是 ,则声明为真。

范围 - 如果所选元素的数量符合 范围,则声明为true。

如果未指定相等性测试,则如果选择至少一个 元素,则声明为真。

和一个简单的例子:

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

您可以轻松定义自己:

module ActionDispatch::Assertions::SelectorAssertions 
    def assert_no_select(*a,&b) # try to think of a better name! 
    begin 
     assert_select(*a,&b) 
    rescue AssertionFailedError 
     return 
    end 
    raise "fail" # there should be a better built-in alternative 
    end 
end 
+0

由于'AssertionFailedError'在评估否定之前引发,因此这不起作用。 – gertas

+0

好点!编辑。 –

26

别忘了你可以随时通过在计数,并设置为零。

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

这不适用于我:即使找到元素也不会引发异常。 –

+1

更新:对于“身体”以外的任何元素都可以正常工作。 –

+0

很高兴知道!谢谢@MatijsvanZuijlen – GantMan

2

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

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

但是,我真的很喜欢GantMan的回答!