RSpec标记:我可以在同一个标​​签上混合包含和排除吗?

时间:2014-06-19 14:39:09

标签: ruby rspec tags

我们说我有以下rspec示例:

it "doesn't require a user account" do
  ...
end

it "requires user of type A", requires_user: "A" do
  ...
end

it "requires user of type B", requires_user: "B" do
  ...
end

it "requires user of type C", requires_user: "C" do
  ...
end

我的环境无法运行需要" B"类型的用户的测试。或者" C",但对于运行不需要特殊用户或仅需要类型" A"的测试,这是合适的。是否可以指定将针对该环境运行我想要的测试的标记选项?我尝试以下列方式组合多个标签:

rspec spec --tag ~requires_user:B --tag ~requires_user:C

但这没有达到预期的效果。您似乎只能为给定的标记名称/密钥提供一个标记过滤器,并且只处理了最后一个requires_user标记:

rspec spec --tag ~requires_user:B --tag ~requires_user:C
Run options:
  exclude {:requires_user=>"C"}

这似乎关闭了大多数想到的其他想法,因为这意味着我不能使用内含物(这需要包括&#34; A&#34;还包括没有的测试完全requires_user标记,我甚至不确定是否可以执行后者)并添加requires_user: "none"代码并不能真正帮助解决问题。< / p>

是否有某种方法可以使用键/值标记,或者我必须将它们全部分开并将它们转换为二进制标记,即。

it "doesn't require a user account" do
  ...
end

it "requires user of type A", requires_user_A: true do
  ...
end

it "requires user of type B", requires_user_B: true do
  ...
end

it "requires user of type C", requires_user_C: true do
  ...
end

也许它的方式更好,因为新测试不可能需要多种用户类型。但总的来说,我认为有些标签会有相互排斥的价值,也就是说,如果它是A,它不能是B或C等,我当然希望使用键/值对来描述一下。但是,如果它限制了我执行我想要的测试的能力,那将是一个问题。

0 个答案:

没有答案