在运行时跳过RSpec测试用例

and*_*ich 14 testing rspec functional-testing rspec2

我正在针对存在于几个不同市场的网站产品运行RSpec测试.每个市场都有微妙的不同功能组合等.我希望能够编写测试,以便他们在运行时跳过自己,具体取决于他们所针对的市场/环境.在不同的市场上运行时,测试不应该失败,也不应该通过 - 它们根本不适用.

不幸的是,似乎没有一种简单的方法可以将测试标记为跳过.如果不尝试注入"待定"块(不管怎样都不准确?),我该如何做到这一点?

Rob*_*her 19

使用排除过滤器.

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
Run Code Online (Sandbox Code Playgroud)

或者更好的是,使用隐式过滤器.

describe "market a", :if => CurrentMarket.a? do # or whatever
   ...
end
Run Code Online (Sandbox Code Playgroud)


Ngo*_*ral 6

我发现这个问题正在寻找一种方法来真正跳过我知道现在会失败的示例,但一旦情况发生变化,我想“取消跳过”它们。因此,对于 rspec 3.8,我发现可以skip在示例中使用,如下所示:

it 'is going to fail under several circumstances' do
  skip("Here's the reason") if conditions_met?
  expect(something)
end
Run Code Online (Sandbox Code Playgroud)

实际上,在大多数情况下(可能不像这个问题那么复杂)我宁愿使用pending而不是skip,因为如果测试停止失败它会通知我,所以我可以“取消跳过”它们。众所周知,跳过的测试将永远不会再执行 =)