如何在(:all)之前访问rspec中的元数据?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在(:all)之前访问rspec中的元数据?相关的知识,希望对你有一定的参考价值。

我希望能够在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

以上是关于如何在(:all)之前访问rspec中的元数据?的主要内容,如果未能解决你的问题,请参考以下文章

从 t4 脚手架模板访问我的模型中的元数据(数据注释)

如何使用 Swift 通过 PHAsset 访问 UIImage 的元数据

如何使用 Swift 在 healthkit 中访问锻炼的元数据

如何访问 QMediaPlayer 的元数据?

如何读取和修改 High sierra (APFS) 中文件夹的元数据

是否可以编辑 MPMediaItem 的元数据?