黄瓜 DSL 是如何工作的?
How does Cucumber DSL work?
让我们采取:
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 会查看之前注册的步骤,如果有任何正则表达式匹配,它就会执行与该正则表达式关联的块。
让我们采取:
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 会查看之前注册的步骤,如果有任何正则表达式匹配,它就会执行与该正则表达式关联的块。