定义支持块期望的匹配器
当您希望使用自定义匹配器支持块期望(例如 expect { ... }.to matcher
)时,您必须指定这一点。您可以通过定义 supports_block_expectation?
方法或使用 DSL 的 supports_block_expectations
快捷方法手动(或根据某些逻辑确定性地)执行此操作。
手动定义块匹配器
给定一个名为 “blockmatcherspec.rb” 的文件,其中包含
RSpec::Matchers.define :support_blocks do
match do |actual|
actual.is_a? Proc
end
def supports_block_expectations?
true # or some logic
end
end
RSpec.describe "a custom block matcher" do
specify { expect { }.to support_blocks }
end
当我运行 rspec ./block_matcher_spec.rb
时
那么示例应该通过。
使用快捷方式定义块匹配器
给定一个名为 “blockmatcherspec.rb” 的文件,其中包含
RSpec::Matchers.define :support_blocks do
match do |actual|
actual.is_a? Proc
end
supports_block_expectations
end
RSpec.describe "a custom block matcher" do
specify { expect { }.to support_blocks }
end
当我运行 rspec ./block_matcher_spec.rb
时
那么示例应该通过。
使用快捷方式定义块匹配器
给定一个名为 “blockmatcherspec.rb” 的文件,其中包含
RSpec::Matchers.define :support_blocks_with_errors do
match(:notify_expectation_failures => true) do |actual|
actual.call
true
end
supports_block_expectations
end
RSpec.describe "a custom block matcher" do
specify do
expect {
expect(true).to eq false
}.to support_blocks_with_errors
end
end
当我运行 rspec ./block_matcher_spec.rb
时
那么它应该失败,提示
Failures:
1) a custom block matcher is expected to support blocks with errors
Failure/Error: expect(true).to eq false
expected: false
got: true
(compared using ==)