使用Rspec 3.3我希望有一个匹配器具有不同的实现,具体取决于示例的元数据(实际上它是根据rspec-rails的示例的:type
)
但是我看不到任何一种方法:
例如,我可以:
RSpec::Matchers.define :some_matcher, type: :request do |expected|
#implementation 1
end
RSpec::Matchers.define :some_matcher, type: :feature do |expected|
#implementation 2
end
或者
RSpec::Matchers.define :some_matcher do |expected|
match do |actual|
case metadata[:type]
when :request
#etc
end
end
end
FYI / FWIW,匹配器将have_link_to
预期expected_href
,然后实现取决于它是否是功能/请求/控制器/邮件程序 - 我已设法解决此问题,但我想看看是否有更好的方法来定义“多态匹配器”。
答案 0 :(得分:1)
这已经有一段时间了但是(可能是非常不受支持的)这样做的方式将是
RSpec::Matchers.define :some_matcher do |expected|
match do |actual|
case method_missing(:class).metadata[:type]
when :request
#etc
end
end
end
这利用了DSL如何将method_missing转发到执行上下文。