使用共享示例获取当前spec文件的文件路径

时间:2013-05-22 20:38:47

标签: ruby-on-rails ruby rspec rspec2 rspec-rails

我想问一下,获取当前spec文件的文件路径和调用堆栈中的其他文件的可接受模式是什么。

例如,我有一些共享it_should_behave_like示例的视图规范,而shared_examples_for是在单独的mixin规范中定义的。

想象:

views/page1.html_spec.rb views/page2.html_spec.rb

it_behaves_like "common view"

mixins/common_view_spec_mixin.rb

shared_examples_for "common view" do

如果我想在mixins/common_view_spec_mixin.rb内调用spec文件调用示例,请调用

example.file_path会屈服 ./spec/mixins/common_view_spec_mixin.rb

但如果我想知道page1page2是否正在接受测试,这不是很有帮助。

我发现我可以进入元数据挖掘调用堆栈以获取file_paths:

example.metadata[:example_group][:file_path]收益./spec/mixins/common_view_spec_mixin.rb

example.metadata[:example_group][:example_group][:file_path]会产生./spec/views/page1.html_spec.rb./spec/views/page2.html_spec.rb

我想问一下,如果RSpec::Core::Example的结构发生变化,或者有更好的方法可以做到这一点,这是否是一种可接受的模式。

谢谢,

1 个答案:

答案 0 :(得分:0)

您想在哪里获取此信息?在标准格式化程序的输出中,此信息位于故障消息转储中。您将看到如下行:

  

共享示例组:来自./spec/views/page1.html_spec.rb:14的“公共视图”

最后请注意,它提供了完整的基本示例文件路径以及您调用it_should_behave_like的行号。直接在那下面应该是标准的上下文文件位置:

  

./ spec / mixins / common_view_spec_mixin.rb:10:在'块(2级)中'