以编程方式跳过 RSpec 中的测试

Programmatically skip a test in RSpec

我很好奇是否有办法在 before 块中跳过 RSpec 中的测试?我在想这样的事情:

RSpec.configure do |config|
  config.before(:each) do |spec|
    if some_condition?
      spec.skip
    end
  end
end

上面对 skip 的调用不起作用。这是针对我正在研究的一个想法,因此它以这种方式工作并且不必使用例如元数据修改测试很重要。我想可以使用 RSpec 内部结构,例如标记状态,但我想先检查一下是否有任何 API 用于此。

看来您必须在块内显式调用跳过:

around(:each) do |example|
  if some_condition?
    example.run
  else
    example.skip
  end
end

around hooks

的文档

将示例转换为 "pending"(跳过它,以不同方式打印输出等)

我在 rspec 邮件列表中询问过,结果 skip 'reason' 成功了。该示例被标记为待定,这并不理想,但可以回答问题。