黄瓜:步骤定义多个可选组 - 在同一步骤中捕获

时间:2017-09-20 20:04:18

标签: cucumber

我试图编写一个符合以下相似步骤并捕获参数的步骤:

第1步:And I delete the filter(s) using the "UI"

第2步:Then I delete the filter(s) using the "API" for "doc-browser" context

第3步:I delete the filter(s) using the "API" for "doc-browser" context with user "file_user2"

我不想创建3个单独的步骤,它们都以I delete the filter using the #{arg}开头,最后2个只是在那里延伸。

我认为这将实现它:

And(/^I delete the filter\(s\) using the "([^"]*)"(?: for "([^"]*)" context| with user "([^"]*)")?/) do |delete_method, context, user| case delete_method when 'API' if user.nil? SearchFilters.new.delete_global_local_filters(delete_method, api_context_val: context) else SearchFilters.new.delete_global_local_filters(delete_method, { api_context_val: context, username: user }) end when 'UI' SearchFilters.new.delete_global_local_filters(delete_method, filter_name: @filter_name) end end

但是,我没有抓住我的用户名。

是否有可能完成一个步骤定义,捕获所有3个变体并仍然捕获我的论点?

1 个答案:

答案 0 :(得分:1)

只需复制我的邮件列表答案,以防其他人对此问题感兴趣。

我知道你不想使用三个不同的步骤,但在这种情况下你真的应该因为

  1. 每个步骤的实现都是明确的一行,因此您要删除案例陈述。
  2. 此步骤的正则表达式非常糟糕,您将删除
  3. 每个单独的步骤都提供了简化传递参数的机会,你有2个API和一个UI参数,可以完全删除(如果我正确理解代码,你可以删除所有参数和正则表达式)
  4. 这是一个明显的例子,一点点的重复是一个值得为更简单的实现付出的代价。

    使用正则表达式和params减少步骤定义的数量通常是一种反模式。

    一切顺利

    安德鲁