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
但我想做相反的事情:"在每次测试之前,除非你看到这个标签,否则执行以下操作......"
如何根据某些测试中是否存在标记,跳过spec_helper
中的设置步骤?
答案 0 :(得分:5)
首先,你会期待像
这样的东西RSpec.configure do |config|
config.before(:each, alter_spacetime: false) do |example|
# fancy magic here
end
end
以这种方式工作,但它没有。
但您可以访问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