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