有没有办法(也许是一些关键)告诉 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
看看标签 -
您可以在测试文件中执行类似的操作
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
对于后代:您可以通过创建自定义格式化程序来抑制文档输出主体中待处理测试的输出。
(对于 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>
调用格式化程序。
请注意,我最后仍然看到“待处理的测试”部分。但就我而言,这是完美的。
这是在 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
我找到的整个文件的最佳解决方案是更改文件名:
foo_spec_skipped.rb