【发布时间】: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.configure 或 RSpec.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@