Rspec中的标签可以进行AND运算或OR运算吗?

时间:2013-09-26 13:46:24

标签: ruby-on-rails ruby rspec cucumber

在Cucumber,我有类似的东西

@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中调用匹配两个或更多标签的单个测试。

1 个答案:

答案 0 :(得分:4)

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

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

  • 为每种语言定义一个布尔标记,并使用传统的包含过滤器
  • 定义do标记,其值为thisthat等,并使用lambda排除过滤器,该过滤器将排除所有你想要的价值。

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

但是,我怀疑有一种方法可以在命令行中指定lambda表达式格式,所以我认为你只能使用配置选项方法。无论如何,请参阅http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/Configuration:filter_run_excluding以获取基础功能的描述。

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