我正在阅读RSpec,我正在试图找出RSpec的“应该”如何实现.
有人可以就这个功能的元素性质如何工作吗?
代码位于:
http://github.com/dchelimsky/rspec/blob/master/lib/spec/expectations/extensions/kernel.rb
TIA,
-daniel
澄清:
target.should == 5
目标的价值如何通过“应该”,反过来又是“==”?
解决方法
看看
class OperatorMatcher.
这一切都归结为Ruby,让你省略句点和括号.你真正写的是:
target.should.send(:==,5)
也就是说,将消息发送到对象目标,然后将消息发送到任何应该返回的消息.
该方法应该是猴子修补到内核,所以它可以被任何对象接收.返回的匹配者应该保持在这种情况下是目标的实际.
Matcher实现了方法==,它与预期的比较,在这种情况下,它是数字5.一个可以尝试自己的切割示例:
module Kernel def should Matcher.new(self) end end class Matcher def initialize(actual) @actual = actual end def == expected if @actual == expected puts "Hurrah!" else puts "Booo!" end end end target = 4 target.should == 5 => Booo! target = 5 target.should == 5 => Hurrah!