如何告诉 rspec 在没有挂起的测试输出的情况下运行?

问题描述 投票:0回答:4

有没有办法(也许是一些关键)告诉 rspec 跳过待处理的测试并且不打印有关它们的信息?

我有一些自动生成的测试,例如

pending "add some examples to (or delete) #{__FILE__}"

我运行“bundle exec rspec spec/models --format Documentation”并得到如下内容:

Rating
  allows to rate first time
  disallow to rate book twice

Customer
  add some examples to (or delete) /home/richelieu/Code/first_model/spec/models/customer_spec.rb (PENDING: No reason given)

Category
  add some examples to (or delete) /home/richelieu/Code/first_model/spec/models/category_spec.rb (PENDING: No reason given)
......

我想保留这些文件,因为我稍后会更改它们,但现在我想要如下输出:

Rating
  allows to rate first time
  disallow to rate book twice

Finished in 0.14011 seconds
10 examples, 0 failures, 8 pending
ruby rspec
4个回答
11
投票

看看标签 -

您可以在测试文件中执行类似的操作

describe "the test I'm skipping for now" do     
  it "slow example", :skip => true do
    #test here
  end
end

并像这样运行测试:

bundle exec rspec spec/models --format documentation --tag ~skip

其中

~
字符排除带有以下标签的所有测试,在本例中为
skip


7
投票

对于后代:您可以通过创建自定义格式化程序来抑制文档输出主体中待处理测试的输出。

(对于 RSpec 3)。我在我的spec目录中创建了一个house_formatter.rb文件,如下所示:

class HouseFormatter < RSpec::Core::Formatters::DocumentationFormatter
   RSpec::Core::Formatters.register self, :example_pending
   def example_pending(notification); end
end

然后我将以下行添加到我的 .rspec 文件中:

--require spec/house_formatter

现在我可以使用

rspec --format HouseFormatter <file>
调用格式化程序。

请注意,我最后仍然看到“待处理的测试”部分。但就我而言,这是完美的。


6
投票

这是在 Github 上针对此问题发布的官方“修复”,以回应 Marko 提出的 issue,因此值得单独回答。

这可能也是更好的答案;我的很脆弱。这要归功于 Rspec 团队的Myron Marston

您可以很容易地自己实现这个:

module FormatterOverrides
  def example_pending(_)
  end

  def dump_pending(_)
  end
end

RSpec::Core::Formatters::DocumentationFormatter.prepend FormatterOverrides

或者如果您只想沉默无块示例:

module FormatterOverrides
  def example_pending(notification)
    super if notification.example.metadata[:block]
  end

  def dump_pending(_)
  end
end

RSpec::Core::Formatters::DocumentationFormatter.prepend FormatterOverrides

或者,如果您只是想过滤掉无块待处理的示例(但是 仍然显示其他待处理的示例):

RSpec.configure do |c|
  c.filter_run_excluding :block => nil
end

0
投票

我找到的整个文件的最佳解决方案是更改文件名:

foo_spec_skipped.rb
© www.soinside.com 2019 - 2024. All rights reserved.