如何在没有 spec_helper 的 before(:each) 块中获取 RSpec 测试名称
How to fetch RSpec test name in before(:each) block without a spec_helper
下面是一个基本测试套件示例:
describe "Main test suite" do
it "should run test #1" do
...
end
it "should run test #2" do
...
end
end
我想添加一个 before(:each)
,它使用完整的测试名称执行一些特殊逻辑(它将测试名称作为元数据 header 插入到由每次测试)。我发现使用 "#{self.class.description}"
仅捕获测试套件名称(在本例中为“主测试套件”),但我还需要捕获测试名称本身。
我在 Whosebug 上看到了一些其他类似的问题,例如 Getting the full RSpec test name from within a before(:each) block,但答案都涉及向 spec_helper.rb
添加 Spec::Runner.configure
或 RSpec.configure
选项,但是我们 运行 通过不使用 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
。但是我们有数百个这样的测试,我不想 copy-paste 在每个测试中都使用相同的逻辑——这似乎是 before(:each)
块的理想用例。
我通过将它放在我的文件顶部来让它工作:
RSpec.configure do |config|
config.before(:each) do |x|
do_stuff("#{x.class.description} - #{x.example.description}")
end
end
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
下面是一个基本测试套件示例:
describe "Main test suite" do
it "should run test #1" do
...
end
it "should run test #2" do
...
end
end
我想添加一个 before(:each)
,它使用完整的测试名称执行一些特殊逻辑(它将测试名称作为元数据 header 插入到由每次测试)。我发现使用 "#{self.class.description}"
仅捕获测试套件名称(在本例中为“主测试套件”),但我还需要捕获测试名称本身。
我在 Whosebug 上看到了一些其他类似的问题,例如 Getting the full RSpec test name from within a before(:each) block,但答案都涉及向 spec_helper.rb
添加 Spec::Runner.configure
或 RSpec.configure
选项,但是我们 运行 通过不使用 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
。但是我们有数百个这样的测试,我不想 copy-paste 在每个测试中都使用相同的逻辑——这似乎是 before(:each)
块的理想用例。
我通过将它放在我的文件顶部来让它工作:
RSpec.configure do |config|
config.before(:each) do |x|
do_stuff("#{x.class.description} - #{x.example.description}")
end
end
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