带有参数的RSpec自定义匹配器



我正在学习Michael Hartl的rails教程Ch.8练习2,该教程要求通过定义RSpec自定义匹配器将测试与实现解耦。

我有一个定义是

RSpec::Matchers.define :have_error_message do |message|
  match do |page|
    page.should have_selector('div.alert.alert-error', text: message)
  end
end

所以我可以在RSpec 中编写以下测试

it { should have_error_message('Invalid') }

不过,调用have_error_message而不使用下面这样的参数也是可行的。

it { should_not have_error_message } 

为什么这没有给出错误(缺少参数)?自定义匹配器中的消息变量取什么值?

参数默认为nil,因此它会出现一个带有nil文本值的错误,如:

page.should have_selector('div.alert.alert-error', text: nil)

最新更新