作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试使用 RSpec 为我在 RoR 中的测试创建自定义匹配器。
define :be_accessible do |attributes|
attributes = attributes.is_a?(Array) ? attributes : [attributes]
attributes.each do |attribute|
match do |response|
response.class.accessible_attributes.include?(attribute)
end
description { "#{attribute} should be accessible" }
failure_message_for_should { "#{attribute} should be accessible" }
failure_message_for_should_not { "#{attribute} should not be accessible" }
end
end
我希望能够在我的测试中编写如下内容:
...
should be_accessible(:name, :surname, :description)
...
但是对于上面定义的匹配器,我必须传递一个符号数组而不是用逗号分隔的符号,否则测试只会检查第一个符号。
有什么想法吗?
最佳答案
我是这样实现的:
RSpec::Matchers.define :be_accessible do |*attributes|
match do |response|
description { "#{attributes.inspect} be accessible" }
attributes.each do |attribute|
failure_message_for_should { "#{attribute} should be accessible" }
failure_message_for_should_not { "#{attribute} should not be accessible" }
break false unless response.class.accessible_attributes.include?(attribute)
end
end
end
我反转了 match
和 each
循环。我认为这是 Rspec 期望的方式,因为给 match
方法的 block 是由 Rspec 抽象匹配器执行的(我猜)。
通过使用 |*attributes|
定义 block ,它获取参数列表并将其转换为 Array
。
所以调用 should be_accessible(:name, :surname, :description)
会起作用。
顺便说一下,如果你只想检查属性是否存在,一个简单的
should respond_to(:name, :surname, :description)
同样有效。但它看起来不像质量赋值方面。
关于ruby-on-rails - 具有多个参数的 RSpec 和自定义匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16135899/
我是一名优秀的程序员,十分优秀!