加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:08:48 所属栏目:百科 来源:网络整理
导读:我正在阅读RSpec,我正在试图找出RSpec的“应该”如何实现. 有人可以就这个功能的元素性质如何工作吗? 代码位于: http://github.com/dchelimsky/rspec/blob/master/lib/spec/expectations/extensions/kernel.rb TIA, -daniel 澄清: target.should == 5 目
我正在阅读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!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读