我们来看看:
When /^(?:|I )fill in the following:$/ do |fields|
fields.rows_hash.each do |name, value|
When %{I fill in "#{name}" with "#{value}"}
end
end
凭借我的基本 Ruby 知识,我认为
When
是一个需要正则表达式和块的方法调用。
但是我也在想,这是一个定义,而不是一个方法调用,那么它是如何实现的呢?
When
如何定义某事?
代码如下(代码取自here):
def register_rb_step_definition(regexp, symbol = nil, options = {}, &proc)
proc_or_sym = symbol || proc
RbDsl.register_rb_step_definition(regexp, proc_or_sym, options)
end
When
、Given
、Then
是 register_rb_step_definition
的别名。
您传递一个正则表达式作为参数和一个块。
每个步骤定义都通过正则表达式和块进行注册。执行测试时,cucumber 会查找之前注册的步骤,如果有任何正则表达式匹配,它就会执行与该正则表达式关联的块。