如何跳过特定 Rspec 标签的某些设置?
How can I skip some setup for specific Rspec tags?
Rspec 可以根据 是否存在 测试标签轻松配置设置。例如,如果某些测试需要创建一个平行宇宙(假设您有代码来做到这一点):
# 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
但我想做相反的事情:"before each test, unless you see this tag, do the following..."
如何根据某些测试中存在的标记跳过 spec_helper
中的设置步骤?
起初,你会期待
RSpec.configure do |config|
config.before(:each, alter_spacetime: false) do |example|
# fancy magic here
end
end
以这种方式工作,但事实并非如此。
但是您可以访问 example
,这是一个 Example instance and has the #metadata
method, which returns 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
Rspec 可以根据 是否存在 测试标签轻松配置设置。例如,如果某些测试需要创建一个平行宇宙(假设您有代码来做到这一点):
# 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
但我想做相反的事情:"before each test, unless you see this tag, do the following..."
如何根据某些测试中存在的标记跳过 spec_helper
中的设置步骤?
起初,你会期待
RSpec.configure do |config|
config.before(:each, alter_spacetime: false) do |example|
# fancy magic here
end
end
以这种方式工作,但事实并非如此。
但是您可以访问 example
,这是一个 Example instance and has the #metadata
method, which returns 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