用于测试阵列的RSpec魔术没有?方法?

时间:2012-08-23 05:57:56

标签: ruby rspec rspec2

我有一个Array / Enumerable,其中每个实体都是Hash。使用RSpec测试“枚举中的所有条目都不应该有一个名为'body'的密钥”的最常用的方法是什么?

我可以做类似的事情:

array.none? {|thing| thing.key? 'body'}.should be_true

array.should be_none {|thing| thing.key? 'body'}

...但是必须有更多的RSpec方式来做到这一点,对吗?

我似乎无法找到合适的built-in matcher。答案是自定义匹配器吗?

2 个答案:

答案 0 :(得分:1)

我会用 responses.should be_none { |response| response.key? 'body' }

你给的两个之间。对于像

这样的错误,这会更有帮助

“预计没有?返回真实”

你的第一个例子会说像

“预期为假:假类为真”

我能看到的第三个选项就像是

 keys = responses.map { |response| response.keys }.flatten.uniq
 keys.should_not include "body"

这会产生类似

的错误

期望[“foo”,“bar”,“body”]不包括“body”

除此之外,查看https://www.relishapp.com/rspec/rspec-expectations/v/2-11/docs/built-in-matchers/satisfy-matcher

你可以尝试

responses.should satisfy { |response| not response.keys.include? "body" }

答案 1 :(得分:0)

另一种选择是使用be_none转换be_any语句:

responses.should_not be_any { |response| response.key? 'body' }

我认为结果是等价的,因为any?是对none?的否定。

如果您认为错误消息足够有用,那么您认为哪个选项最直观易读,并且正如EnabrenTane所提到的那样。

相关问题