1

在黄瓜,我有这样的事情

@do_this
@de @fr @it @us
Scenario: Do something irrelevant
Given ...
When ...
Then

@do_that
@de @fr @it @us
Scenario: Do a different irrelevant thing
Given ...
When ...
Then

可以做类似的事情cucumber -t @de -t @do_this,所以只有匹配两个标签的场景才会运行。不过,我似乎无法在 Rspec 中获得相同的行为。在上面的示例中,只有第一个场景会运行,即使第二个场景也有@de标签。

背景:我有一个在许多国家/地区推出的平台,并非所有功能都在每个国家/地区都可用。所以好的事情是我可以相应地标记场景,然后从命令行调用各个场景。由于几个原因,我目前正在从 Cucumber 切换到 Rspec,但这是目前唯一阻碍我的事情。当然,我也愿意接受有关如何解决此问题的其他建议。

简短版本:我想在 Rspec 中调用匹配两个或多个标签的单个测试。

4

1 回答 1

4

RSpec 标记表达式仅对包含进行 OR 运算,对排除进行 AND 运算,因此您通常无法执行您想要的操作。此外,您似乎可以在示例描述中使用标签过滤器或过滤器,但不能同时使用两者,因此我认为将这两种技术结合起来也是可行的。(也许有人可以纠正我)。

但是,如果您的示例暗示了有限/结构化的情况,我认为您可以执行以下操作:

  • 为每种语言定义一个布尔标记并使用传统的包含过滤器
  • 定义具有do、 等值的标签thisthat并使用lambda排除过滤器,它将排除您想要的值之外的所有内容。

如果您执行上述操作,您将能够指定包含您想要的任何语言以及您想要do任何值子集的示例

但是,我怀疑是否有办法lambda在命令行中指定表达式格式,所以我认为您仅限于使用配置选项方法。无论如何,请参阅http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration:filter_run_ exclude了解底层功能的描述。

这是很多限制,我知道。这似乎是 RSpec 可以很容易扩展的领域,所以也许我们将来会看到扩展。

于 2013-09-26T15:46:16.177 回答