显示示例的完整描述

时间:2017-07-05 15:27:07

标签: ruby rspec

在RSpec中,我们如何从一个例子中生成一个字符串,表示当前示例的当前元描述?

示例:

current_metadata_description

正如我们所看到的,给定示例的当前元描述是:

  

Api :: V1 :: Public :: Signin :: ByEmailController POST #create当提供者为“email”时,如果密码是好的登录时有保存的电子邮件

感谢。

修改

RSpec不提供if let mediaType = info[UIImagePickerControllerMediaType] as? String { if mediaType == "public.image" { print("Image Selected") } if mediaType == "public.movie" { print("Video Selected") } } 。我刚刚发明了它,以举例说明我想拥有的东西。

2 个答案:

答案 0 :(得分:1)

虽然我不确定你的整体意图是做什么的。

Rspec::Core::ExampleGroup.it为该块产生RSpec::Core::Example。与所有屈服方法一样,可以捕获块局部变量中的屈服ObjectRSpec::Core::Example有一个full_description方法,看起来就像您要找的那样。 RSpec Source

例如(没有双关语):

describe String do 
  context 'Down' do 
    context 'Deeper' do 
      it 'can describe itself' do |ex|
        # ex is the specific RSpec::Core::Example for this it block
        expect(ex.full_description).to eq('String Down Deeper can describe itself')
      end
    end
  end
end

运行此将返回

.
Finished in 0.003 seconds (files took 0.21998 seconds to load)
1 example, 0 failures

如果您想要所需的输出,则必须捕获所产生的值,因为块本身是在RSpec::Core::ExampleGroup的实例的上下文中执行的,因此调用self.class.metadata[:full_description]将包含{的描述{1}}但不是RSpec::Core::ExampleGroup本身(例如" String Down Deeper")

如文档中所述,如果这是用于记录目的(或者您希望每个示例的此信息类似),您可以访问RSpec::Core::Example摘录中的RSpec::Core::Example

Hooks

如果你真的想补丁(我不赞同)你可以做以下

# Useful for configuring logging and/or taking some action based
# on the state of an example's metadata.
#
#     RSpec.configure do |config|
#       config.before do |example|
#         log example.description
#       end
#
#       config.after do |example|
#         log example.description
#       end
#
#       config.around do |example|
#         log example.description
#         example.run
#       end
#     end

然后你的测试就像你说的那样。

答案 1 :(得分:0)

尝试使用--format option运行rspec:

bundle exec rspec --format documentation

<强>更新

我不知道任何可以为你做这件事的rspec方法。我能想到的一种方法是,在运行测试时将规范描述写入文件,然后在自定义current_metadata_description方法中从中读取描述。这是关于Generating documentation from specs.希望有帮助的教程!