Ruby Rspec中的自定义匹配器。什么是比赛?

Ruby Rspec中的自定义匹配器。什么是比赛?,ruby,rspec,Ruby,Rspec,我正在从RSpec阅读以下代码: require 'rspec/expectations' RSpec::Matchers.define :be_a_multiple_of do |expected| match do |actual| actual % expected == 0 end end RSpec.describe 9 do it { is_expected.to be_a_multiple_of(3) } end 什么是匹配do块?这是一个进程中的一个块?

我正在从RSpec阅读以下代码:

require 'rspec/expectations'

RSpec::Matchers.define :be_a_multiple_of do |expected|
  match do |actual|
    actual % expected == 0
  end
end

RSpec.describe 9 do
  it { is_expected.to be_a_multiple_of(3) }
end
什么是
匹配do
块?这是一个进程中的一个块?语法有点奇怪。。。
define
方法采用两个参数;第一个是符号,第二个是
Proc

在引擎盖下。。。
actual
如何表示整数9

expect(object).to eq(value)
         |         |   |
         |         |  expected (matcher argument)
         |         |
       actual      |
                matcher
这段代码中发生了什么

调用
RSpec::Matcher.define
时,将传递匹配器的名称(在本例中为
be\u a\u multiple\u of
)和

传递给该块的参数是所需的值。这是在运行规范时作为匹配器参数传递的值,在本例中
为(3)的倍数

在调用时,调用匹配方法,该方法也会传递一个块。该块接受一个参数,actual,它是调用匹配器时传递给
expect
的值。在这种情况下,这将是9
期望(9)。是(3)的多个

块只是使用
actual
expected
进行一些计算,以返回truefalse

实际是如何指9的

在这种情况下,值9作为示例组的主题公开,因为它作为参数传递给最外层的示例组,换句话说,这与编写
subject{9}

如果您检查
是否符合预期
与编写
预期(主题)
基本相同

{ expect(subject).to be_a_multiple_of(3) }
如前所述,传递给expect
方法的对象是传递给match方法的块的实际参数。这就是
actual
所指的
9

这段代码中发生了什么

调用
RSpec::Matcher.define
时,将传递匹配器的名称(在本例中为
be\u a\u multiple\u of
)和

传递给该块的参数是所需的值。这是在运行规范时作为匹配器参数传递的值,在本例中
为(3)的倍数

在调用时,调用匹配方法,该方法也会传递一个块。该块接受一个参数,actual,它是调用匹配器时传递给
expect
的值。在这种情况下,这将是9
期望(9)。是(3)的多个

块只是使用
actual
expected
进行一些计算,以返回truefalse

实际是如何指9的

在这种情况下,值9作为示例组的主题公开,因为它作为参数传递给最外层的示例组,换句话说,这与编写
subject{9}

如果您检查
是否符合预期
与编写
预期(主题)
基本相同

{ expect(subject).to be_a_multiple_of(3) }
如前所述,传递给expect
方法的对象是传递给match方法的块的实际参数。这就是
actual
所指的
9

RSpec.describe 9 do
{ is_expected.to be_a_multiple_of(3) }
{ expect(subject).to be_a_multiple_of(3) }