我正在阅读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
match do
块是什么?这是proc中的一个块?语法有点奇怪...... define
方法有两个参数;第一个是符号,第二个是Proc
?
引擎盖下...... actual
如何引用整数9?
答案 0 :(得分:2)
expect(object).to eq(value)
| | |
| | expected (matcher argument)
| |
actual |
matcher
此代码中发生了什么?
RSpec::Matchers.define :be_a_multiple_of do |expected|
调用RSpec::Matcher.define
时,会传递匹配器的 名称 (在本例中为be_a_multiple_of
)和 阻止
传递给该块的参数是预期值。这是运行规范时作为 匹配器参数 传递的值,在这种情况下为 3 be_a_multiple_of(3)
match do |actual|
阻止的Inisde,调用 匹配 方法,该方法也会传递一个块。该块接受一个参数实际,这是在调用匹配器时传递给expect
的值。在这种情况下, 9 ,expect(9).to be_multipe_of(3)
该块仅使用actual
和expected
进行一些计算,以返回 true 或 false 强>
实际如何参考9?
RSpec.describe 9 do
在这种情况下,值 9 会作为 示例组 的主题公开,因为它已通过作为所述最外层示例组的参数http://doi2bib.org换句话说,它与写subject { 9 }
如果您选中the approach suggested by @anumi is_expected
与撰写expect(subject)
基本相同。
{ is_expected.to be_a_multiple_of(3) }
与
相同{ expect(subject).to be_a_multiple_of(3) }
如前所述,传递给 expect 方法的对象是用作传递给 match 方法的块的实际参数的对象。这就是actual
引用9