【问题标题】:How to fetch RSpec test name in before(:each) block without a spec_helper如何在没有 spec_helper 的 before(:each) 块中获取 RSpec 测试名称
【发布时间】:2020-10-23 21:27:10
【问题描述】:

下面是一个基本测试套件示例:

describe "Main test suite" do
  it "should run test #1" do
    ...
  end
  it "should run test #2" do
    ...
  end
end

我想添加一个before(:each),它使用完整的测试名称执行一些特殊的逻辑(它将测试名称作为元数据标头插入到每个测试发出的所有 HTTP 请求中)。我发现使用"#{self.class.description}" 只捕获测试套件名称(在本例中为“主测试套件”),但我还需要捕获测试名称本身。

我在 StackOverflow 上看到过一些其他类似的问题,例如 Getting the full RSpec test name from within a before(:each) block,但答案都涉及将 Spec::Runner.configureRSpec.configure 选项添加到 spec_helper.rb,但我们正在通过自定义环境运行这些测试它不使用spec_helper.rb,所以我需要一个不依赖于它的解决方案。

我还看到了其他示例,例如How to get current context name of rspec,他们在测试本身而不是在before(:each) 块中进行日志记录,因此他们可以执行以下操作:it "should Bar" do |example| puts "#{self.class.description} #{example.description}" end。但是我们有数百个这样的测试,我不想在每个测试中复制粘贴相同的逻辑——这似乎是 before(:each) 块的理想用例。

【问题讨论】:

  • 你不需要使用 spec_helper,你只需要 Spec::Runner.configure do |config| 块。在您的规范文件中包含它有什么问题?
  • 我试过了,它没有任何作用......我把它放在哪里有关系吗?我尝试将它放入构造函数和 before(:all) 块中,但即使我将打印语句放入其中,它们似乎也没有任何效果。
  • 把它(或者该代码的任何版本适合您的 rspec 版本)作为规范的第一行,在任何其他行之前,就像您使用 @ 987654335@

标签: ruby testing rspec hook


【解决方案1】:
describe "Main test suite" do
  before(:each) do |x|
    puts "#{x.class.description} - #{x.example.description}"
  end

  it "should run test #1" do
    ...
  end
  it "should run test #2" do
    ...
  end
end

【讨论】:

【解决方案2】:

我把它放在我的文件顶部让它工作了:

RSpec.configure do |config|
    config.before(:each) do |x|
        do_stuff("#{x.class.description} - #{x.example.description}")
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多