RSpec允许您通过执行以下操作,在before(:each)块中获取当前运行的测试方法名称:
Spec::Runner.configure do |config|
config.before :each do |x|
x.method_name # returns 'should be cool'
end
end
这适用于以下测试:
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
describe 'Hello world' do
it 'should be cool' do
# test code
end
end
是否有可能在前面的块中获得整个测试名称(a.k.a.'Hello World应该很酷')?
答案 0 :(得分:24)
在RSpec 2.0中你可以使用(我不确定它是否是最好的方式,但它有效)
x.example.metadata[:example_group][:full_description]
至于RSpec 1.X我不知道。这可能就是你要求的......
答案 1 :(得分:12)
我找到了答案。事实证明,曾经有一个名为full_description的方法在x上完全符合我的要求,但不推荐使用。以下产生我想要的字符串:
"#{x.class.description} #{x.description}"
答案 2 :(得分:7)
使用Rspec 3.3,它的工作原理如下:
RSpec.configure do |config|
config.before :example do |x|
Rails.logger.debug("=== running spec example #{x.metadata[:full_description].inspect}")
end
end
答案 3 :(得分:6)
或者您可以直接使用这些方法:
x.example.description
x.example.file_path
等
答案 4 :(得分:4)
自(04/01/2014)发布最新版本的rspec后,已更改为
example.metadata[:description]
答案 5 :(得分:1)
on rspec 2.12.0 "#{x.class.description} #{x.example.description}"
正常工作
答案 6 :(得分:0)
您也可以获取该文件。我用它来追踪我的恶作剧规范的问题:
config.before(:each, js: true) do |s|
md = s.example.metadata
x = md[:example_group]
Rails.logger.debug "==>>> #{x[:file_path]}:#{x[:line_number]} #{md[:description_args]}"
end
请注意,这是示例组的行号(不太有用),但是当前示例的描述可以帮助您确定哪个正在运行。
==>>> ./spec/features/editing_profiles_spec.rb:3 [“用户编辑个人资料”]
答案 7 :(得分:0)
这在rspec 3.5中有效
example.metadata[:full_description]
有关如何访问它的完整示例:
subject(:example_description) do |example|
example.metadata[:full_description]
end