Ruby Rspec中的自定义匹配器。什么是比赛?
我正在从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块?这是一个进程中的一个块?
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
进行一些计算,以返回true或false
实际是如何指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
进行一些计算,以返回true或false
实际是如何指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) }