Ruby元编程,RSpec的“应该”如何工作?

前端之家收集整理的这篇文章主要介绍了Ruby元编程,RSpec的“应该”如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在阅读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!

猜你在找的Ruby相关文章