【问题标题】:How does Cucumber DSL work?Cucumber DSL 是如何工作的?
【发布时间】:2015-04-27 11:02:58
【问题描述】:

让我们来:

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 怎么定义?

【问题讨论】:

  • “这是一个定义,而不是一个方法调用”是什么意思?
  • 我的意思是我认为When ... do ... end在某种程度上是一个定义,因为在第3行中,我们可以使用字符串来调用它。
  • 你把我搞糊涂了 :) 在第 3 行调用方法有什么问题?看看他们是如何实现World 的。 When 将在 Gherkin 实现中以相同的方式定义。
  • When 是一个接受一些参数的方法,也可以选择一个块。请记住,在 Ruby 中,方法参数可以是任何类型,块可以是可选的。

标签: ruby cucumber dsl internal


【解决方案1】:

代码如下(代码取自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

WhenGivenThenregister_rb_step_definition 的别名。 您将正则表达式作为参数和块传递。

每个步骤定义都注册正则表达式和块。执行测试时,cucumber 会查看之前注册的步骤,如果任何正则表达式匹配,它就会执行与该正则表达式关联的块。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2022-11-13
    • 2017-12-23
    • 1970-01-01
    相关资源
    最近更新 更多