问题 如何在(: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)。它不可用吗?我只是犯了一个愚蠢的错误吗?


11625
2017-10-12 16:26


起源

github.com/rspec/rspec-core/issues/6 可能会建议功能不存在?或者只是在之前设置元数据(:all)是不可行的? - Ben Flynn


答案:


里面一个 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

有关更多信息,请查看 这篇评论在rspec / rspec-core#42中


10
2017-08-11 11:32



凉。我没有在我当前的项目中使用rspec,所以如果其他人可以确认这对他们有效,那么我会接受答案。 - Ben Flynn
或者......;)你可以简单地保存示例,运行 gem install rspec 并通过执行规范 rspec example_spec.rb。 - rubiii
哈!我会尽力。我需要安装一台安装了Ruby的计​​算机,但我想我有一台。如果我最终对我的环境充满信心,我可能会放弃。 =) - Ben Flynn
方法 example 已弃用,然后在当前的rspec版本中删除。下雪了 RSpec.current_example。 - giorgian