我希望能够在before(:all)方法中显示测试组名称(和祖先):
describe "My awesome app" do
before(:all) do
puts running_example_group.metadata[:full_description] # <- what I'm imagining
...
done
...
describe "awesome widget" do
before (:all) do
puts running_example_group.metadata[:full_description] # <- what I'm imagining
...
done
...
done
done
这个想法是产生输出:
My awesome app
My awesome app awesome widget
这个数据在“it”子句中可用,但我无法弄清楚之前(:all)。它不可用吗?我只是犯了一个愚蠢的错误吗?
在before(:all)
块内,没有“运行示例”,但您仍然可以通过RSpec::Core::ExampleGroup
访问元数据。以下是如何从各种范围访问元数据的示例:
describe "My app", js: true do
context "with js set to #{metadata[:js]}" do
before :all do
puts "in before block: js is set to #{self.class.metadata[:js]}"
end
it "works" do
puts "in example: js is set to #{example.metadata[:js]}"
end
end
end
有关更多信息,请查看this comment in rspec/rspec-core#42。
这不完全回答原始问题,但它是相关的,这是与我的谷歌搜索相关的第一篇帖子,所以我想分享我刚刚想到的内容。
在我的例子中,我一直在寻找一种在before(:suite)
/ before(:all)
中运行某些命令的方法,但前提是正在运行的测试包括一些系统测试(也就是某些元数据的例子)。这是我想出的:
RSpec.configure do |config|
config.before(:suite) do
examples = RSpec.world.filtered_examples.values.flatten
has_system_tests = examples.any? { |example| example.metadata[:type] == :system }
if has_system_tests
...
end
end
end