黄瓜:如何在不同的转换中使用相同的正则表达式?

我有以下转换:

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

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

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

基本上,如果它是给Given步骤,我想创建阶段,如果不是,则会提出失败。

有任何想法吗?


如果正则表达式是相同的,那么您实际上没有选择区分行为的选项。 确定你是否处于一个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
链接地址: http://www.djcxy.com/p/61005.html

上一篇: Cucumber: How to use the same regex in different transforms?

下一篇: LINQ to SQL