我正在针对存在于几个不同市场的网站产品运行RSpec测试。每个市场都有微妙的不同功能组合等。我希望能够编写测试,以便他们在运行时跳过自己,具体取决于他们所针对的市场/环境。当在不同的市场上运行时,测试不应该失败,也不应该通过 - 它们根本不适用。
不幸的是,似乎没有一种简单的方法可以将测试标记为跳过。如果不尝试注入“挂起”块(不管怎么说都不准确?),我该如何做呢?
答案 0 :(得分:18)
describe "market a", :market => 'a' do
...
end
describe "market b", :market => 'b' do
...
end
describe "market c", :market => 'c' do
...
end
RSpec.configure do |c|
# Set these up programmatically;
# I'm not sure how you're defining which market is 'active'
c.filter_run_excluding :market => 'a'
c.filter_run_excluding :market => 'b'
# Now only tests with ":market => 'c'" will run.
end
或者更好的是,使用implicit filters。
describe "market a", :if => CurrentMarket.a? do # or whatever
...
end
答案 1 :(得分:2)
我发现了这个问题,希望找到一种方法来真正跳过我现在知道会失败的示例,但是一旦情况发生变化,我想“跳过”它们。因此,对于rspec 3.8,我发现一个人可以在示例中使用skip
就像这样:
it 'is going to fail under several circumstances' do
skip("Here's the reason") if conditions_met?
expect(something)
end
实际上,在大多数情况下(可能没有这个问题那么复杂),我宁愿使用pending
而不是skip
,因为如果测试停止失败,它会通知我,所以我可以“跳过”。众所周知,跳过的测试将永远不会再执行=)