如何跳过特定Rspec标签的某些设置?

Nat*_*ong 4 ruby rspec

Rspec可以根据测试标签的存在轻松配置设置.例如,如果某些测试需要创建并行Universe(假设您有代码来执行此操作):

# some_spec.rb
describe "in a parallel universe", alter_spacetime: true do
  # whatever
end

# spec_helper.rb
RSpec.configure do |config|
  config.before(:each, :alter_spacetime) do |example|
    # fancy magic here
  end
end
Run Code Online (Sandbox Code Playgroud)

但我想做相反的事情:"在每次测试之前,除非你看到这个标签,否则执行以下操作......"

如何spec_helper根据某些测试中是否存在标记跳过设置步骤?

Iva*_*hek 5

起初,你会期待类似的东西

RSpec.configure do |config|
  config.before(:each, alter_spacetime: false) do |example|
    # fancy magic here
  end
end
Run Code Online (Sandbox Code Playgroud)

以这种方式工作,但事实并非如此.

但您可以访问example,这是一个Example实例,并具有#metadata返回Metadata对象的方法.您可以使用该值检查标志的值,并且特定示例上的标志将覆盖包含describe块上的标志.

config.before(:each) do |example|
  # Note that we're not using a block param to get `example`
  unless example.metadata[:alter_spacetime] == false
    # fancy magic here
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 我经过一些修补后编辑了你的答案,但这对我很有用,而且我觉得很优雅.谢谢!:) (2认同)