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

Ben*_*ynn 12 ruby rspec2

我希望能够在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
Run Code Online (Sandbox Code Playgroud)

这个想法是产生输出:

My awesome app
My awesome app awesome widget
Run Code Online (Sandbox Code Playgroud)

这个数据在"it"子句中可用,但我无法弄清楚之前(:all).它不可用吗?我只是犯了一个愚蠢的错误吗?

rub*_*iii 12

在一个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
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看rspec/rspec-core#42中的此注释.

  • 方法`example`已被弃用,然后在当前的rspec版本中删除.它现在是`RSpec.current_example`. (4认同)