gpt4 book ai didi

ruby - 采用 block 的自定义 RSpec 匹配器

转载 作者:数据小太阳 更新时间:2023-10-29 07:19:19 27 4
gpt4 key购买 nike

如何创建以下 RSpec 匹配器?

foo.bars.should incude_at_least_one {|bar| bar.id == 42 }

如果我正在重新发明轮子,请告诉我,但我也很想知道如何创建一个采用 block 的自定义匹配器。一些内置的匹配器可以做到这一点,所以这是可能的。我试过这个:

RSpec::Matchers.define :incude_at_least_one do |expected|
match do |actual|
actual.each do |item|
return true if yield(item)
end
false
end
end

我还尝试在两个级别都传递 &block。我缺少一些简单的东西。

最佳答案

我从 Neil Slater 的代码开始,并让它工作:

class IncludeAtLeastOne
def initialize(&block)
@block = block
end

def matches?(actual)
@actual = actual
@actual.any? {|item| @block.call(item) }
end

def failure_message_for_should
"expected #{@actual.inspect} to include at least one matching item, but it did not"
end

def failure_message_for_should_not
"expected #{@actual.inspect} not to include at least one, but it did"
end
end

def include_at_least_one(&block)
IncludeAtLeastOne.new &block
end

关于ruby - 采用 block 的自定义 RSpec 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16222450/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com