隐式文档字符串

当您将 rspec-expectations 与 rspec-core 一起使用时,RSpec 能够根据示例中的最后一个期望为您自动生成示例的文档字符串。当匹配器完全表达您将在示例文档字符串中写入的内容时,这可能很方便,但它也容易被滥用。我们发现,文档字符串的自由形式在使用得当的情况下(例如,用于记录特定行为的“原因”)提供了很大的价值,而当您依赖匹配器为您生成文档字符串时,您会失去这种灵活性。

一般来说,我们建议仅当匹配器与您要编写的文档字符串完全一致时才使用此功能。即使这样,许多用户更喜欢完整文档字符串的明确性,因此谨慎使用此功能(如果使用的话)。

运行通过的示例

给定一个名为“implicit_docstrings_spec.rb”的文件,其中包含

RSpec.describe "Examples with no docstrings generate their own:" do
  specify { expect(3).to be < 5 }
  specify { expect([1,2,3]).to include(2) }
  specify { expect([1,2,3]).to respond_to(:size) }
end

我运行 rspec ./implicit_docstrings_spec.rb -fdoc

那么输出应该包含“is expected to be < 5”

并且输出应该包含“is expected to include 2”

并且输出应该包含“is expected to respond to #size”。

运行失败的示例

给定一个名为“failing_implicit_docstrings_spec.rb”的文件,其中包含

RSpec.describe "Failing examples with no descriptions" do
  # description is auto-generated per the last executed expectation
  specify do
    expect(3).to equal(2)
    expect(5).to equal(5)
  end

  specify { expect(3).to be > 5 }
  specify { expect([1,2,3]).to include(4) }
  specify { expect([1,2,3]).not_to respond_to(:size) }
end

我运行 rspec ./failing_implicit_docstrings_spec.rb -fdoc

那么输出应该包含“is expected to equal 2”

并且输出应该包含“is expected to be > 5”

并且输出应该包含“is expected to include 4”

并且输出应该包含“is expected not to respond to #size”。