【问题标题】:Cucumber: How to use the same regex in different transforms?Cucumber:如何在不同的转换中使用相同的正则表达式?
【发布时间】:2012-07-01 13:33:37
【问题描述】:

我有以下变换:

Transform /^"([^"]+)" Phase$/ do |name|
  # Returns the phase named 'name',
  # or raises an exception if it doesn't exist
end

适用于这样的步骤定义:

Then /("(?:[^"]+)" Phase) should do something/ do |phase|
  # Should fail if the specified phase doesn't exist
end

我还有以下使用相同"([^"]+)" Phase 模式的步骤定义:

Given /("([^"]+)" Phase) follows ("([^"]+)" Phase)/ do |pre, post|
  # Should create the specified phases 
end

如果指定的阶段不存在,我不希望步骤定义失败。我想改为创建阶段。

我想创建一个转换,它将为我创建阶段以稍微干燥步骤定义,但我不能这样做,因为我已经有了上面提到的转换,它具有完全相同的正则表达式。

基本上,如果它是Given 步骤,我想创建阶段,如果不是,则引发失败。

有什么想法吗?

【问题讨论】:

  • +1 只是为了标题。会是一部好电影。

标签: cucumber transform


【解决方案1】:

如果正则表达式相同,那么您实际上没有选择区分行为。确定您是否在 Given 步骤中可能是可能的,但即使是这样,这也将是一些非常隐蔽的魔法,有可能让未来的读者和场景作者感到惊讶。 .

最简单、最能表达意图的方法是在步骤语言中明确说明短语的性质,然后您可以有 2 个明确分离的转换,例如

EXISTING_PHASE = Transform /^existing Phase "([^"]+)"$/ do |phase|
    # raise error if it doesn't exist
end

UNEXISTING_PHASE = Transform /^unknown Phase "([^"]+)"$/ do |phase|
    # create the phase if it doesn't exist
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-25
    • 2022-06-10
    • 2020-04-03
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多