Cucumber DSL 如何工作?

问题描述 投票:0回答:1

我们来看看:

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
如何定义某事?

ruby cucumber dsl internal
1个回答
0
投票

代码如下(代码取自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 会查找之前注册的步骤,如果有任何正则表达式匹配,它就会执行与该正则表达式关联的块。

© www.soinside.com 2019 - 2024. All rights reserved.