我正在学习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)