下面是一个基本测试套件示例:
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上看到了其他一些类似的问题,比如从before(:each(块中获取完整的RSpec测试名称,但答案都涉及到向spec_helper.rb
添加Spec::Runner.configure
或RSpec.configure
选项,但我们通过不使用spec_helper.rb
的自定义环境运行这些测试,所以我需要一个不依赖于此的解决方案。
我还看到了其他例子,比如如何获得rspec的当前上下文名称,他们在测试本身而不是在before(:each)
块中进行日志记录,所以他们可以做一些类似的事情:it "should Bar" do |example| puts "#{self.class.description} #{example.description}" end
。但我们有数百个这样的测试,我不想在每个测试中复制粘贴相同的逻辑——这似乎是before(:each)
块的理想用例。
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
我把它放在我的文件的顶部:
RSpec.configure do |config|
config.before(:each) do |x|
do_stuff("#{x.class.description} - #{x.example.description}")
end
end