带参数的RSpec自定义匹配器

时间:2012-07-23 23:16:47

标签: ruby-on-rails rspec

我正在关注Michael Hartl的rails tutorial Ch.8 exercise 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 } 

为什么这不会出错(参数丢失)?自定义匹配器中的消息变量有什么价值?

1 个答案:

答案 0 :(得分:1)

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

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